我使用CloudKit在我的應用程序,並按照在WWDC視頻「CloudKit最佳實踐」的最佳實踐開始CKFetchDatabaseChangesOperation返回任何記錄區ID
要做的第一件事就是檢查更改我做像這樣,
let changesOperation = CKFetchDatabaseChangesOperation(previousServerChangeToken: databaseChangeToken)
changesOperation.fetchAllChanges = true
changesOperation.recordZoneWithIDChangedBlock = { self.recordZoneWithIDChanged($0) }
changesOperation.recordZoneWithIDWasDeletedBlock = { self.recordZoneWithIDWasDeleted($0) }
changesOperation.changeTokenUpdatedBlock = { self.changeTokenUpdate($0) }
changesOperation.fetchDatabaseChangesCompletionBlock = { self.fetchDatabaseChangesCompletion($0, isMoreComing: $1, error: $2) }
privateDatabase.add(changesOperation)
有私人數據庫中的記錄,我設置了取指,但我只得到了changeTokenUpdatedBlock
和fetchDatabaseChangesCompletion
。
我說得對,當我運行此操作時,我應該會看到recordZoneWithIDChangedBlock
被點擊,並且我的私有數據庫的默認區域被傳遞到此塊?
這意味着,當我把我的fetchDatabaseChangesCompletion
,沒有什麼可以抓取,因爲記錄區ID的數組爲空:(注意,error
爲零)
fileprivate func fetchDatabaseChangesCompletion(_ newToken: CKServerChangeToken?, isMoreComing: Bool, error: Error?)
{
if let error = error
{
// Handle error
return
}
let fetchZoneChangesOperation = CKFetchRecordZoneChangesOperation(recordZoneIDs: changedRecordZoneIDs,
optionsByRecordZoneID: nil)
fetchZoneChangesOperation.recordChangedBlock = { self.recordChanged($0) }
fetchZoneChangesOperation.recordWithIDWasDeletedBlock = { self.recordWithIDWasDeleted($0, string: $1) }
fetchZoneChangesOperation.recordZoneFetchCompletionBlock = { self.recordZoneFetchCompletion($0, newChangeToken: $1, clientSentChangeTokenData: $2, isMoreComing: $3, error: $4) }
fetchZoneChangesOperation.completionBlock = { self.fetchRecordZoneChangesCompletion() }
privateDatabase.add(fetchZoneChangesOperation)
}
請注意,我正在傳遞'nil'到'previousServerChangeToken'來獲取所有更改... –