首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CloudKit - CKRecord.ID可接受的recordName?

CloudKit - CKRecord.ID可接受的recordName?
EN

Stack Overflow用户
提问于 2019-02-28 07:25:58
回答 3查看 1.3K关注 0票数 1

我已经编写了一种方法来保存自定义区域中的记录,它似乎正在按预期工作。然而,有一件事我不确定,那就是CKRecord.ID recordName。现在,我只使用一个UUID字符串。是否有指定recordName的首选方法?当前的CloudKit示例非常稀少,而且CK文档中相当一部分似乎已经过时了。谢谢。

代码语言:javascript
复制
func saveToCloud(record: String, recordType: String, recordTypeField: String, reference: CKRecord?, referenceType: String?) {

    let zoneID = CKRecordZone.ID(zoneName: Zone.test, ownerName: CKRecordZone.ID.default.ownerName)
    let recordID = CKRecord.ID(recordName: UUID().uuidString, zoneID: zoneID)
    let newRecord = CKRecord(recordType: recordType, recordID: recordID)

    if let reference = reference, let referenceType = referenceType {
        let newReference = CKRecord.Reference(record: reference, action: .none)
        newRecord[referenceType] = newReference
    }
    newRecord[recordTypeField] = record
    database.save(newRecord) { (_,error) in
        if let err = error as? CKError {
            print("ERROR =" , err.userInfo )
        }
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-28 10:37:08

在我看来,在CKRecord.ID的文档中非常清楚:

记录ID对象由名称字符串和区域ID组成。名称字符串是长度不超过255个字符的ASCII字符串。对于自动创建的记录,ID名称字符串基于UUID,因此保证是唯一的。在创建自己的记录ID对象时,只要每个名称在指定区域内都是唯一的,就可以自由地使用对应用程序或用户更有意义的名称。例如,您可以使用文档名称作为名称字符串。

票数 1
EN

Stack Overflow用户

发布于 2019-08-20 20:08:56

我同意UUID是理想的。示例:

代码语言:javascript
复制
let newId = CKRecord.ID(recordName: UUID().uuidString)

但是,重要的是不要尝试创建无效字符或零长度字符串。结果是,一个致命的错误,!因此,当从不受信任的源加载它们时(比如从服务器输出进行解析),我使用安全函数,如下所示:

代码语言:javascript
复制
extension CKRecord.ID {     
    public static func fromUntrusted(_ string: String?) -> CKRecord.ID? {
        guard let string = string else { return nil }
        guard let _ = string.data(using: .ascii, allowLossyConversion: false) else { return nil }
        guard string.count > 0 && string.count < 255 else { return nil }
        return CKRecord.ID(recordName: string)
    }
}

用法:

代码语言:javascript
复制
if let recordId = CKRecord.ID.fromUntrusted(response) {
    // use value
}
票数 3
EN

Stack Overflow用户

发布于 2019-03-12 20:38:06

根据我的经验,最好是从记录键生成记录名称,即从必须是唯一的字段组合中生成记录名称。

这样,即使错误地尝试两次添加相同的记录,也可以保证唯一性。

在CloudKit中,没有其他方法可以使某些字段组合成为唯一的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54920478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档