Каков наилучший подход для предварительного заполнения основного хранилища данных при использовании NSPersistentCloudKitContainer? - PullRequest
0 голосов
/ 26 февраля 2020

У меня следующий сценарий, в котором я анализирую объекты из файла JSON и сохраняю их в своем хранилище базовых данных. Теперь я использую NSPersistentCloudKitContainer, и когда я запускаю приложение на другом устройстве, оно также анализирует файл JSON и добавляет объекты в Core Data. Это приводит к дублированию объектов.

Теперь мне интересно, есть ли:

  • Простой способ, если я могу проверить, что объект уже существует удаленно?
  • Есть ли другой способ избежать двойного сохранения объектов в CloudKit?
  • Получение уведомлений о завершении извлечения данных с удаленного компьютера?

1 Ответ

0 голосов
/ 09 марта 2020

Я еще не использовал NSPersistentCloudKitContainer в проекте, но вы можете предотвратить дублирование в Базовые данные , выбрав объект в вашем .xcdatamodel и добавив одно из его свойств в качестве уникального ограничения. Как правило, какой-то король ID поля. Это предотвратит сохранение дубликатов объектов в магазине. Если вы сделаете это, обязательно установите .mergePolicy в контексте, чтобы Core Data знала, как с этим справиться.

enter image description here

Re: CloudKit , если вы сохраните новый объект CKRecord и вручную назначите CKRecordID, все содержимое контейнера, соответствующее этому идентификатору, будет перезаписано. Я часто устанавливаю свои идентификаторы таким образом, чтобы потом смело пакетно обновлять кучу записей.

let recordID  = CKRecordID(recordName: "{manually set an ID}")
let record    = CKRecord(recordType: "{your record type}", recordID: recordID)
...