【问题标题】:How to know if the CloudKit Zone exists already如何知道 CloudKit Zone 是否已经存在
【发布时间】:2016-09-23 22:03:10
【问题描述】:

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

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

最好的策略是什么?

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

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

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

感谢您的帮助。

【问题讨论】:

    标签: cloudkit zone


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 这对我来说很奇怪。为什么我们不能只从仪表板创建区域?这是否也意味着我们可以从我们的应用程序的开发版本创建一个区域,然后删除该代码并且不再在发布版本中使用创建区域代码,只是假设该区域存在? (也不使用任何从应用程序中删除区域的方式)
    • 区域只存在于私有数据库中。您不能在某人的私人数据库中预先填写区域或记录。必须为使用您应用的每个用户创建它们。
    • @Jonny 在开发版本中创建区域没有任何好处。 1) 该区域仅存在于您自己的开发中的私有数据库中。 2) 该区域不会存在于生产专用数据库中。
    • 啊,对不起,当然是的,这是有道理的。正确的区域也存在于共享数据库中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多