Вы будете использовать этот инициализатор, только если у вас уже есть запись (вы изменяете или удаляете). Закодированные системные поля содержат эту информацию, поэтому вам не нужно указывать ее напрямую. Если вы создаете новую запись, вы будете использовать один из других инициализаторов для ее генерации, например, , например, .
Так, например, в моем приложении, когда я делаю запись для синхронизации с 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)
}