Подтвердить что ты не робот

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

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

Насколько известно, CloudKit - это всего лишь способ получить и получить данные в облаке. CloudKit - это другой способ синхронизации данных с iCloud?

Мои вопросы:

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

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

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

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

Мое настоящее понимание:

  • Основные данные используются для локального хранения данных

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

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

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

4b9b3361

Ответ 1

Это так:

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

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

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

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