如何知道 CloudKit 区域是否已经存在

How to know if the CloudKit Zone exists already

要在私有 CKRecordZone 中添加 CKRecord,您需要确保该区域已经存在。

但这是否意味着每次我需要插入一条记录时,我都需要获取所有区域并使用 fetchAllRecordZonesWithCompletionHandler 查找我的区域是否存在?效率不是很高。

最好采用什么策略?

我看到的大多数示例都展示了如何创建区域并向其中添加记录。但是你不会每次都创建区域,你不能假设它存在...

如果区域尚未创建,下面的代码将失败

let customZone = CKRecordZone(zoneName: self.zoneName!)
// Create a CKRecord
let lessonRecord = CKRecord(recordType: self.recordType, zoneID: customZone.zoneID)

感谢您的帮助。

要查看特定区域是否存在,请使用 CKFetchRecordZonesOperation 并仅传递一个记录区域 ID。

如果您的代码设置正确,您只需执行一次。

创建一个代表记录区域的 class。此 class 应执行给定区域的所有 CloudKit 操作。当您为特定区域初始化此 class 的实例时,您可以检查该区域是否存在。如果没有,则创建区域。然后,每次需要向该区域读取或写入数据时,您都可以使用该区域助手 class 的特定实例。

当然每次读写操作都需要检查错误结果来检查CKErrorZoneNotFound错误。出现此类错误可能意味着该区域已从该应用程序的另一个副本中删除。