CKFetchDatabaseChangesOperation
有 recordZoneWithIDWasPurgedBlock
和 recordZoneWithIDWasDeletedBlock
块。我的假设是,当用户删除与应用程序相关联的所有 iCloud 数据时,会调用清除块,而当我手动删除一个区域时,会调用删除块。
然而在我使用 CloudKit 几周的经验中,这两个块都没有被调用过,我尝试了许多方法来触发这两个块,但它从未发生过。相反,这些情况似乎是通过在 CKFetchRecordZoneChangesOperation
我后来使。我得到一个 CKError.Code.changeTokenExpired
如果区段已被删除,并且有 CKError.Code.userDeletedZone
如果用户自己删除iCloud数据。
对我来说,通过错误来处理这些情况是很好的,也是可以管理的,但我想知道这些块什么时候被调用过?我是否应该像处理deletepurged区的错误一样处理它们?
我自己做的一个bug导致自定义区域总是在应用程序启动时创建,这显然永远不会触发删除块,并使所有更改令牌无效。
对于那些有类似问题的人,我有最令人沮丧的建议类型:检查你的代码! 确保你没有在获取数据库变更之前创建自定义区。