【问题标题】:How to initialize CKRecord with both zoneID and recordID?如何使用 zoneID 和 recordID 初始化 CKRecord?
【发布时间】:2018-01-07 19:23:06
【问题描述】:

我目前正在构建一个将Core Data 记录同步到CloudKit 的解决方案。

我需要帮助来确定我想用CKRecord 做什么是可行的。

我检查了 Apple CloudKit 文档、实验并搜索了网络,但没有找到我想要的答案。

我想用 zoneIDrecordID 来初始化 CKRecord,我将在 init 方法中提供。
初始化程序似乎迫使我在两者之间进行选择。一世 想要创建我自己的 ZoneID(不使用默认值),并设置 recordID 而不是自动生成它。

这可能吗?

【问题讨论】:

    标签: ios cloudkit


    【解决方案1】:

    您可以同时指定区域 ID 和记录 ID,但需要分三步完成:

    首先,使用您的区域 ID 和用户创建一个 CKRecordZoneID

    let ckRecordZoneID = CKRecordZoneID(zoneName: "myZone", ownerName: CKOwnerDefaultName)
    

    然后您可以使用所需的记录 ID 创建一个 CKRecordID 并指定您的 CKRecordZoneID

    let ckRecordID = CKRecordID(recordName: recordIDString, zoneID: ckRecordZoneID)
    

    最后,您可以使用该记录 ID 创建CKRecord

    let ckRecord = CKRecord(recordType: myRecordType, recordID: ckRecordID)
    

    【讨论】:

    【解决方案2】:

    我在 CKRecord 上做了一个扩展,因此代码更改很少:

    extension CKRecord {
        static func with(recordType: CKRecord.RecordType, zoneID: CKRecordZone.ID) -> CKRecord {
            let recordID = CKRecord.ID(recordName: UUID().uuidString, zoneID: zoneID)
            return CKRecord(recordType: recordType, recordID: recordID)
        }
    }
    

    所以代替这个(旧的破方法):

    let myRecord = CKRecord(myType, zoneID: myZoneId)
    

    变成:

    let myRecord = CKRecord.with(myType, zoneID: myZoneId)
    

    请注意,原始方法会为您生成记录名称,而我使用 UUID 进行了生成,这可能是当今最标准的方法。如果我错了,请纠正我。

    【讨论】:

      【解决方案3】:

      以前可以使用 recordID 和 zoneID 来初始化 CKRecord。然而,这已被弃用:

       @available(swift, introduced: 4.2, deprecated: 4.2, message: "Use init(recordType:recordID:) + CKRecord.ID(zoneID:) instead")
      public convenience init(recordType: CKRecord.RecordType, zoneID: CKRecordZone.ID)
      

      但是,似乎可以使用未记录的方式以这种方式执行此操作,因此我假设初始化程序不可靠:

      let recordID = CKRecord.ID(zoneID: myZoneID) //This initializer is not documented!!! 
      let record = CKRecord(recordType: "aString", recordID: recordID)
      

      【讨论】:

        猜你喜欢
        • 2018-12-05
        • 1970-01-01
        • 1970-01-01
        • 2014-04-15
        • 2016-06-23
        • 2017-03-24
        • 1970-01-01
        • 2014-08-13
        • 1970-01-01
        相关资源
        最近更新 更多