Использование Core Data, iCloud и CloudKit для синхронизации и резервного копирования и как это работает вместе

Я на ранних этапах создания приложения, где я хотел бы сохранить, синхронизации и резервного копирования данных. Приложение не будет хранить какие-либо файлы только данные в базе данных. Это будет iOS 8 и выше, поэтому я могу использовать CloudKit. Я провел некоторое исследование и до сих пор не понял, как основные данные, iCloud и CloudKit работают вместе.

насколько я понимаю, CloudKit-это просто способ получения и извлечения данных в / из облака. Является ли CloudKit просто другим способом синхронизации данных с в iCloud?

мои вопросы:

  1. Если я использую CloudKit, мне все еще нужно создать локальную базу данных core?

    • если да, он будет автоматически синхронизирован с iCloud или мне придется вызывать методы для хранения в обоих местах?
  2. Если данные хранятся только в облаке, пользователь сможет получить к нему доступ, когда устройство iOS не подключено к интернету. Я читал, что CloudKit будет иметь только ограниченное кэширование.

  3. как это будет работать, если учетная запись iCloud не включена.

Если кто-то может сломать то, что каждая технология делает в процессе сохранения и синхронизации базы данных основных данных в автономном режиме и в интернете.

мое текущее понимание такое:

  • Core Data используется для хранения данных локально

  • iCloud синхронизирует данные и сохраняет их в облаке

  • CloudKit дает возможность хранить и управлять данными в облаке??

надеюсь, я предоставил достаточно информации для этого вопроса, чтобы не закрыться.

1 ответов


это так:

  • Core Data самостоятельно, является полностью локальным и не работает автоматически ни с одним из облачных сервисов Apple.
  • Основные Данные С включенным iCloud включает синхронизацию через iCloud. Любые изменения, сохраненные в основных данных, распространяются в облако, а любые изменения, внесенные в облако, автоматически загружаются. Данные хранятся как в iCloud, так и в локальном постоянном файле хранилища, поэтому они доступны, даже если устройство не в сети. Вам не нужно писать какой-либо облачный код, вам просто нужно добавить прослушивание входящих изменений (что очень похоже на изменения, сделанные в другом контексте управляемого объекта).
  • CloudKit не связан с основными данными. Это не система синхронизации,это система передачи. Это означает, что в любое время, когда вы хотите читать/писать облачные данные, вам нужно сделать явные вызовы CloudKit API для этого. Ничего не происходит автоматически. CloudKit не хранит данные на устройстве, поэтому данные не доступно, если устройство отключено. CloudKit также добавляет некоторые функции, недоступные для основных данных с iCloud - например, общедоступные общие данные и возможность загрузки только части набора данных вместо всего этого.

Если вы хотите использовать CloudKit с основными данными, вам придется написать свой собственный код для перевода между управляемыми объектами и CloudKit записи. Это не невозможно, но это больше кода писать. Это может быть более надежным, но это слишком скоро скажу наверняка.

я писал блоге описание CloudKit с точки зрения того, кто использовал Core Data и iCloud в прошлом.

обновление, июнь 2016: по состоянию на самая последняя документация для NSPersistentStoreCoordinator, все, что связано с основными данными с iCloud, помечено как устаревшее. В результате этого, вероятно, следует избегать новых разработок.