CKFetchDatabaseChangesOperation不返回记录区ID

Ada*_*ter 5 cloudkit ckfetchrecordchangesopera

我正在我的应用程序中使用CloudKit,并且首先按照WWDC视频“ CloudKit Best Practises”中的最佳做法进行操作

首先要做的就是检查我喜欢的更改,

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)
Run Code Online (Sandbox Code Playgroud)

我正在为其建立访存的私有数据库中有记录,但是我只得到changeTokenUpdatedBlockfetchDatabaseChangesCompletion

我是说对了,我应该期望recordZoneWithIDChangedBlock在运行此操作时看到有人被击中,并将我的私有数据库的默认区域传递到此块中吗?

这意味着当我调用my时fetchDatabaseChangesCompletion,没有什么可取的,因为记录区ID的数组为空:(请注意,error为nil)

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)
}
Run Code Online (Sandbox Code Playgroud)

los*_*hua 3

我遇到了同样的问题,这是由于CKFetchDatabaseChangesOperation并且CKFetchRecordZoneChangesOperation仅在自定义区域上工作。CloudKit确实希望开发人员对数据进行划分,以便他们在自定义区域中支持更多功能。

使用默认区域存储记录的缺点是它没有任何特殊功能。您无法将一组记录自动保存到 iCloud 的默认区域中。同样,您不能对默认区域中的记录使用 CKFetchRecordChangesOperation 对象。

CKRecordZonedefault()参考

CKFetchRecordChangesOperation在 iOS 10 中已弃用并替换为CKFetchRecordZoneChangesOperation.