Ответ 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 отмечен как устаревший. В результате этого, вероятно, следует избегать для новой разработки.