Как поддерживать длительную синхронизацию CloudKit - PullRequest
0 голосов
/ 22 июня 2019

Я пытаюсь реализовать синхронизацию CloudKit.Я получаю удаленное уведомление об измененных данных через

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
{
let notification = CKNotification(fromRemoteNotificationDictionary: userInfo)
        print (notification)

        let bgid = application.beginBackgroundTask {
            print ("backgroundtaskhandler called")
        }
        print (application.backgroundTimeRemaining)

        CKManager.ckmanager.handleNotification(bgid: bgid) { (id) in
            application.endBackgroundTask(id)
            completionHandler(.newData)
        }
}

. Как я понимаю,

CKManager.ckmanager.handleNotification()

в вышеприведенном коде есть только около 30 секунд для выполнения, прежде чем япридется вызывать обработчик завершения, иначе приложение завершит работу.

Теперь я ожидаю, что выборка и обработка новых записей иногда занимают больше времени, чем разрешено.Я не уверен, как это обработать.

Если бы это была операция обновления в CKRecords, я мог бы использовать флаг isLongLived этой операции, но я не вижу, как это будет работать с операцией выборки.

С помощью функции «handleNotification» я вызываю делегата для обработки изменений записи (записи его в локальную базу данных SQL):

let operation = CKFetchRecordZoneChangesOperation(recordZoneIDs: [zoneID!], optionsByRecordZoneID: optionsMap)
operation.fetchAllChanges = true

operation.recordChangedBlock =
{ record in
    self.delegate?.cloudKitRecordChanged(record: record
}

Может кто-нибудь настроить меня на правильный путь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...