如何支持长期运行的Cloudkit同步

时间:2019-06-22 09:42:40

标签: ios swift background cloudkit

我正在尝试实现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
}

任何人都可以让我走上正确的路吗?

0 个答案:

没有答案