CloudKit - Как получить ckRecordID записи, только что сохраненной, используя CKModifyRecordsOperation
Я использую CoreData для хранения локального кэша записей в CloudKit. При сохранении новой записи я делаю следующее:
- Вставьте запись в CoreData. Я отмечаю эту запись как не обновленную в CloudKit. На всякий случай, если мой CKModifyRecordsOperation не работает, я все же могу позже обновить его до CloudKit, используя этот флаг.
- Вставьте запись в CloudKit, используя CKModifyRecordsOperation.
- Попробуйте извлечь ckRecordID записи, вставленной в шаге #2. (Вот где моя логика терпит неудачу, так как я не уверен, как мне этого добиться). У меня нет никаких других ключей (ссылка) и я хочу использовать только CKRecordID в качестве ссылки между CoreData и CloudKit.
- Обновите ckRecordID (полученный на шаге 3) до CoreData.
Какова была бы лучшая логика для решения вышесказанного? Спасибо за ваше время и ответы.
1 ответ
Решение
Я решил это, создав CKRecordID локально и обновив его в CloudKit. Ниже приводится цитата из документации Apple:
Чтобы назначить пользовательский идентификатор записи новой записи, сначала необходимо создать объект CKRecordID. Вам необходимо знать предполагаемое имя и информацию о зоне для этой записи, что также может потребовать создания объекта CKRecordZone.ID. После создания объекта идентификатора записи инициализируйте новую запись, используя метод init(__recordType:recordID:).
Вот мой код:
let zone = CKRecordZone(zoneName: Schema.Zone.group)
let uuid = NSUUID()
let recordType = Schema.RecordType.group
let recordName = uuid.uuidString
let recordID = CKRecordID(recordName: recordName, zoneID: zone.zoneID)
let newRecord = CKRecord(recordType: recordType, recordID: recordID)