Використання основних даних, iCloud та CloudKit для синхронізації та резервного копіювання та як це працює разом


111

Я перебуваю на ранніх стадіях створення програми, де я хотів би зберегти, синхронізувати та створити резервну копію даних. Додаток не зберігатиме файли, а лише дані в базі даних. Це буде iOS 8 і вище, тому я можу використовувати CloudKit. Я провів деякі дослідження, і досі не зрозуміло, як Core Data, iCloud та CloudKit працюють разом.

Наскільки зрозуміти CloudKit - це лише спосіб отримання та отримання даних до / з хмари. Чи є CloudKit лише іншим способом синхронізації даних з iCloud?

Мої запитання:

  1. Якщо я використовую CloudKit, мені все-таки потрібно створити локальну базу даних основних даних?

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

  3. Як це буде працювати, якщо обліковий запис iCloud не ввімкнено.

Якщо хтось може щось зламати, що робить кожна технологія, в процесі збереження та синхронізації бази основних даних в режимі офлайн та в Інтернеті.

Моє сучасне розуміння:

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

  • iCloud синхронізує дані та зберігає у хмарі

  • CloudKit дає можливість зберігати та керувати даними у хмарі ??

Я сподіваюся, що я надав достатньо інформації, щоб це питання не закривалося.


2
Навіть я не робив так багато досліджень на ньому, але наскільки я зрозумів, його не зберігають у місцевих. Це щось на зразок звичайного серверного обслуговування клієнтів. Ось чому без Інтернету ви не можете отримати доступ до своєї БД. і відповідно до документа, якщо користувач не ввімкнув обліковий запис icloud у той час, ви можете лише читати дані з загального контейнера
Sachin

@Yan ми можемо зробити , як це запропонувати , будь ласка, stackoverflow.com/questions/25600556 / ...
Nikunj

Відповіді:


183

Це так:

  • Основні дані самі по собі є повністю локальними і не працюють автоматично з жодною з хмарних служб Apple.
  • Основні дані з iCloud увімкнено синхронізацію через iCloud. Будь-які зміни, які ви зберігаєте в Основних даних, поширюються в хмару, а будь-які зміни, внесені в хмару, автоматично завантажуються. Дані зберігаються як в iCloud, так і у локальному постійному файлі зберігання, тому вони доступні навіть у тому випадку, коли пристрій перебуває в режимі офлайн. Вам не потрібно писати будь-який хмарний код, просто потрібно додати прослуховування для вхідних змін (що дуже схоже на зміни, внесені в інший контекст керованого об'єкта).
  • CloudKit не пов'язаний з основними даними. Це не система синхронізації, це система передачі. Це означає, що будь-коли потрібно читати / записувати хмарні дані, для цього потрібно робити явні дзвінки API CloudKit. Нічого не відбувається автоматично. CloudKit не зберігає дані на пристрої, тому дані недоступні, якщо пристрій офлайн. CloudKit також додає деякі функції, недоступні для основних даних за допомогою iCloud - як загальнодоступні загальнодоступні дані та можливість завантажувати лише частину набору даних замість усієї справи.

Якщо ви хочете використовувати CloudKit з основними даними, вам доведеться написати власний власний код для перекладу між керованими об'єктами та записами CloudKit. Це не неможливо, але написати більше коду. Це може бути більш надійним, але це занадто рано, щоб сказати точно.

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

Оновлення , червень 2016 року: Як і в останній документації наNSPersistentStoreCoordinator , все, що стосується основних даних із iCloud, позначено як застаріле. В результаті цього, ймовірно, слід уникати нових розробок.


1
У минулому у мене виникли проблеми з корупцією при використанні Core Data з iCloud, але я не дуже використовував її з моменту виходу iOS 7. Це повинно бути набагато краще. З CloudKit говорити ще зарано, оскільки вона все ще офіційно не виходить.
Том Харрінгтон

3
@Tom Harrington - Чи можете ви спробувати Core Data з iCloud для iOS 8 і повідомте нам про своє враження? Я також зазнав багато корупції в iOS 7, і підтримка Apple підтвердила багато помилок. Я сподіваюся, що iOS 8 виведе надійність до прийнятного рівня, але хотів би почути від вас, експерт;)
hyouuu


3
"Вам не потрібно писати будь-який хмарний код, вам просто потрібно додати прослуховування для вхідних змін (що дуже схоже на зміни, внесені в інший контекст керованого об'єкта)." - у вас є зразок коду / приклад цього коментаря? Немає твердих прикладів, які я можу знайти :(
Ернест

1
@TomHarrington з таким відгуком, чому навіть є stackoverflow, якщо все, що нам потрібно зробити, це перевірити документацію :(
Ернест

14

Завдяки iOS 13 Apple оголосила про нові функції в Core Data для кращої роботи з CloudKit. Основне доповнення - NSPersistentCloudKitContainer, який в основному управляє синхронізацією між базовими даними та CloudKit.

Ви можете дізнатися більше на сесії WWDC Використання основних даних за допомогою CloudKit .

Apple також випустила приємну колекцію документів для цього самого використання: Mirroring a Core Data Store with CloudKit .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.