只有当你已经有一个记录(你正在修改或删除)时,你才会使用初始值设定项。编码的系统字段包含该信息,因此不需要直接指定。例如,如果您正在创建一个新记录,您将使用其他初始值设定项之一专门生成这些记录。
like so
.
因此,例如,在我的应用程序中,当创建与iCloud同步的记录时,我只检查元数据的存在,如果存在元数据,我使用ckrecord(coder:),否则使用ckrecord(recordtype:recordid:)如下:
if let ckMetaData = object.value(forKey: Schema.GenericFieldNames.ckMetaData) as? Data {
// MetaData exists
if self.debug {
print("ð» RecordFromObject \(self.objectName) We have Metadata. This will update an existing record in iCloud")
}
let unarchiver = NSKeyedUnarchiver(forReadingWith: ckMetaData)
unarchiver.requiresSecureCoding = true
self.outputRecord = CKRecord(coder: unarchiver)
} else {
// No MetaData
if self.debug {
print("ð» RecordFromObject \(self.objectName) We have no Metadata. This record will be new to iCloud!")
}
let objectID = object.objectID.uriRepresentation().absoluteString
let recordID = CKRecordID(recordName: objectID, zoneID: self.inputRecordZoneID)
self.outputRecord = CKRecord(recordType: object.entity.managedObjectClassName, recordID: recordID)
}