CKQuery Perform выбирает только те записи, которые были созданы до запуска приложения
У меня есть приложения для iOS и macOS, над которыми я работаю. С помощью приложения iOS пользователь отправляет данные в iCloud Drive, в то время как они используют аналог MacOS для получения данных. Следующие строки кода взяты из приложения macOS.
func completionPopulateDataFromCloud(uuid: String ,completionHandler: @escaping (Bool) -> (Void)) -> Void {
DispatchQueue.global().async() {
// Start Process //
let cloudContainer = CKContainer(identifier: "whatever...")
let privateDB = cloudContainer.privateCloudDatabase
let predicate = NSPredicate(format: "uuid = %@", uuid)
let query = CKQuery(recordType: "myRecords", predicate: predicate)
query.sortDescriptors = [NSSortDescriptor(key: "date", ascending: false)]
privateDB.perform(query, inZoneWith: nil) { records, error in
guard let records = records else {
completionHandler(false)
return
}
DispatchQueue.main.async() {
[weak self] in
guard let strongSelf = self else { return }
if records.count == 0 {
} else {
let record = records[0]
let recordID = record.recordID.recordName
...
...
completionHandler(true)
}
}
}
}
}
Поэтому я просто сортирую количество записей по дате и получаю последнюю запись вместо получения всех записей.
Дело в том, что приложение не будет получать записи, которые были загружены на iCloud Drive после запуска приложения. Даже если я подожду несколько минут, приложение не получит самую последнюю версию. Если я закрою приложение, а затем перезапущу его, оно получит самое последнее. Это как вещи должны работать? Надеюсь нет. Есть какой-то трюк, о котором я не знаю? Благодарю.
PS Я прочитал эту тему. Я не думаю, что это связано с моим.
1 ответ
Обычным способом является использование пользовательской зоны записи. Создать CKRecordZoneSubscription
и получить изменения с CKFetchRecordZoneChangesOperation
когда приложение запускается. Обработка и сохранение CKServerChangeToken
поддерживать текущее состояние.
В то время как приложение работает, вы получаете уведомления путем push-уведомлений об изменениях.
Пожалуйста, смотрите видео WWDC о CloudKit для получения дополнительной информации.