Core Data、iCloud、CloudKitを使用した同期とバックアップ、およびそれらの連携方法


111

データを保存、同期、バックアップしたいアプリを作成する初期段階です。アプリはデータベースにデータだけを保存しません。iOS 8以降になる予定なので、CloudKitを使用できます。Core Data、iCloud、CloudKitがどのように連携するかについて、いくつか調査を行いましたが、まだ明確ではありません。

CloudKitは、クラウドとの間でデータを取得および取得するための単なる方法です。CloudKitはデータをiCloudと同期する別の方法ですか?

私の質問は:

  1. CloudKitを使用する場合でも、ローカルのコアデータデータベースを作成する必要がありますか?

    • はいの場合、自動的にiCloudと同期されますか、それとも両方の場所に保存するメソッドを呼び出す必要がありますか?
  2. データがクラウドにのみ保存されている場合、iOSデバイスがインターネットに接続されていないときに、ユーザーはデータにアクセスできます。CloudKitのキャッシングは制限されていると読みました。

  3. iCloudアカウントが有効になっていない場合、どのように機能しますか。

コアデータデータベースをオフラインおよびオンラインで保存および同期するプロセスで、各テクノロジが何を行っているかを誰かが分析できる場合。

私の現在の理解は:

  • コアデータはデータをローカルに保存するために使用されます

  • iCloudはデータを同期し、クラウドに保存します

  • CloudKitは、クラウドにデータを保存および管理する機能を提供しますか?

この質問が締め切られないように十分な情報を提供していただければ幸いです。


2
私はそれについてそれ程多くの研究をしませんでした、しかし私はそれが地元で保管されないことを理解したのと同じくらいです。通常のサーバークライアントサービスのようなものです。インターネットがないと、DBにアクセスできません。Docによると、ユーザーがその時点でicloudアカウントを有効にしていない場合、パブリックコンテナーからのデータの読み取りしかできません
Sachin

@ヤン、このようにすることはできますか、stackoverflow.com
questions / 25600556 /…

回答:


183

こんな感じです:

  • Core Data自体は完全にローカルであり、Appleのクラウドサービスと自動的に連携しません。
  • iCloudを有効にしたコアデータは、iCloudを介した同期をオンにします。Core Dataに保存した変更はクラウドに伝達され、クラウドで行われた変更は自動的にダウンロードされます。データはiCloudとローカルの永続ストアファイルの両方に保存されるため、デバイスがオフラインのときでも利用できます。クラウド固有のコードを記述する必要はありません。着信する変更のリッスンを追加するだけです(これは、別の管理対象オブジェクトコンテキストで行われた変更によく似ています)。
  • CloudKitはCore Dataとは関係ありません。同期システムではなく、転送システムです。つまり、クラウドデータの読み取り/書き込みを行う場合は、明示的にCloudKit API呼び出しを行ってクラウドデータを読み取る必要があります。自動的には何も起こりません。CloudKitはデバイスにデータを保存しないため、デバイスがオフラインの場合、データは利用できません。CloudKitは、iCloudのCore Dataでは利用できないいくつかの機能も追加します-パブリック共有データや、全体ではなくデータセットの一部のみをダウンロードする機能など。

CoreKitでCloudKitを使用したい場合は、管理対象オブジェクトとCloudKitレコードの間で変換する独自のカスタムコードを記述する必要があります。不可能ではありませんが、より多くのコードを書く必要があります。それより信頼できるかもしれませんが、確かに言うには時期尚早です。

私は過去にCore DataとiCloudを使用したことがある人の観点からCloudKitについて説明するブログ投稿を書きまし

2016年6月更新:の最新のドキュメントのNSPersistentStoreCoordinator時点で iCloudのコアデータに関連するすべてのものは非推奨としてマークされています。その結果、新しい開発ではおそらく回避する必要があります。


1
以前はiCloudでCore Dataを使用するときに破損の問題がありましたが、iOS 7がリリースされて以来、あまり使用していません。それははるかに良いはずです。CloudKitについては、まだ正式にリリースされていないため、言うのは時期尚早です。
トムハリントン2014年

3
@Tom Harrington-iCloud for iOS 8でCore Dataを試してみて、感想を教えてください。私もiOS 7で多くの破損を経験しており、Appleサポートは多くのバグを確認しました。私はiOS 8がその信頼性を許容可能なレベルに
引き上げることを望んでい

1
CKSIncrementalStoreを確認してください。github.com/CloudKitSpace/CKSIncrementalStore
Nofel Mahmood

3
「クラウド固有のコードを記述する必要はありません。着信する変更のリッスンを追加するだけです(これは、別の管理オブジェクトコンテキストで行われた変更によく似ています)。」-このコメントのコードサンプル/例はありますか?私が見つけることができる確かな例はありません:(
Ernest

1
@TomHarringtonがそのようなフィードバックを提供する理由は、ドキュメントをチェックするだけでスタックオーバーフローが発生する理由です:(
Ernest

14

AppleはiOS 13で、CloudKitとの連携を強化するCore Dataの新機能を発表しました。主な追加はNSPersistentCloudKitContainerで、基本的にCore DataとCloudKitの間の同期を管理します。

詳細については、WWDCセッションで「CloudKitでCore Dataを使用する」を参照してください

Appleはまた、まさにこの使用法に関するドキュメントの素晴らしいコレクションをリリースしました:CloudKitを使用したCore Dataストアのミラーリング

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.