什么时候调用 recordZoneWithIDWasPurgedBlock 和 recordZoneWithIDWasDeletedBlock?

When is recordZoneWithIDWasPurgedBlock and recordZoneWithIDWasDeletedBlock called?

CKFetchDatabaseChangesOperationrecordZoneWithIDWasPurgedBlockrecordZoneWithIDWasDeletedBlock 块。我的假设是,当用户删除与应用程序关联的所有 iCloud 数据时,将调用清除块,而当我手动删除区域时,将调用删除块。

然而,根据我使用 CloudKit 几周的经验,这两个都没有被调用过,我尝试了很多方法来触发任何一个块,但它从未发生过。相反,这些场景似乎是通过我后来制作的 CKFetchRecordZoneChangesOperation 中的错误来处理的。如果区域已被删除,我会收到 CKError.Code.changeTokenExpired,如果用户自己删除 iCloud 数据,我会收到 CKError.Code.userDeletedZone

通过错误处理这些场景对我来说很好并且易于管理,但让我想知道这些块何时被调用?我应该像处理 deleted/purged 区域的错误一样处理它们吗?

我自己的一个错误导致自定义区域总是在应用程序启动时创建,这显然不会触发删除块并使所有更改令牌无效。

对于那些有类似问题的人,我有最令人沮丧的建议:检查你的代码!确保在获取数据库更改之前没有创建自定义区域。