我正在尝试实现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
}
任何人都可以让我走上正确的路吗?