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

标签 cloudkit zone

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

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

最好的策略是什么?

我见过的大多数例子都展示了如何创建一个区域并在其中添加一条记录。但是您不会每次都创建该区域,并且您不能只是假设它存在......

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

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

谢谢你的帮助。

最佳答案

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

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

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

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

关于cloudkit - 如何知道 CloudKit 区域是否已经存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37451722/

相关文章:

proxy - 为什么区域 "asia-northeast1-a"显示为加利福尼亚而不是日本

swift - 将 CoreData 存储在 iCloud 中

ios - 具有复杂谓词的 CKSubscription

oracle - "TIMESTAMP WITH TIME ZONE"<--> DateTImeOffset 映射不会在 INSERT 命令上传递区域部分( Entity Framework + Oracle)

c# - 无偏时间系统 C#

visual-studio-2010 - 如何修改我的设置以允许 VS2010 从 "Unauthorized Zone"加载第 3 方 XSD 文件?

swift - 当用户输入日期/时间字段查询时,我可以对 CKRecord 进行排序吗?

swift - 使用 Cloudkit Assets 作为 UIimage

swift - 将 NSPredicate/NSCompoundPredicate 与 Where 子句或可选返回值一起使用,CloudKit

angular - 为什么全局错误处理程序中的 toastr 服务在 Angular 4/5/6 中不起作用?