假设我将 50 条记录保存到 CloudKit,CKModifyRecordsOperation
如下所示:
let operation = CKModifyRecordsOperation(recordsToSave: records, recordIDsToDelete: nil)
operation.savePolicy = .changedKeys
operation.modifyRecordsCompletionBlock = { records, _, error in
//...
}
privateDB.add(operation)
在我的其他设备上,我会收到50 个不同的背景通知,每一个都CKRecord
发生了变化。没关系,我期待。
我像这样处理每个入站通知:
func processCloudKitNotification(notification: CKNotification, database: CKDatabase){
guard let notification = notification as? CKQueryNotification else { return }
if let recordID = notification.recordID{
var recordIDs = [CKRecordID]()
switch notification.queryNotificationReason {
case .recordDeleted:
//Delete [-]
//...
default:
//Add and Edit [+ /]
recordIDs.append(recordID)
}
let fetchOperation = CKFetchRecordsOperation(recordIDs: recordIDs)
fetchOperation.fetchRecordsCompletionBlock = { records, error in
//...
}
database.add(fetchOperation)
}
}
CKRecordID
但是由于 50 个传入通知中的每一个都是单独的事件,因此该函数会被调用 50 次不同的时间,因此会触发大量请求以使用通知给我的 s 来拉取完整记录。
如何在合理的时间内将所有传入的 notification 排队,CKRecordID
以便我可以一次CKFetchRecordsOperation
使用多个 recordID 发出更有效的请求?