CloudKit - CKRecord.ID可接受的recordName?

问题描述 投票:0回答:2

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

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 )
        }
    }
}
swift cloudkit ckrecord
2个回答
1
投票

从我的观点来看,它在CKRecord.ID的文档中非常明确:

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


0
投票

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

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

AFAIK,没有其他方法可以使CloudKit中的某些字段组合独特。

© www.soinside.com 2019 - 2024. All rights reserved.