web-dev-qa-db-ja.com

Core Data、iCloud、CloudKitを使用して同期とバックアップを行い、連携する方法

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

CloudKitを理解する限り、クラウドとの間でデータを取得および取得する方法にすぎません。 CloudKitは、iCloudとデータを同期するための別の方法ですか?

私の質問は:

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

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

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

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

私の現在の理解は:

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

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

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

この質問が閉じられないように十分な情報を提供したいと思います。

105
Yan

こんな感じです:

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

Core DataでCloudKitを使用する場合は、管理対象オブジェクトとCloudKitレコード間で変換する独自のカスタムコードを記述する必要があります。不可能ではありませんが、記述するコードが増えます。 mightより信頼性が高くなりますが、確実に言うには早すぎます。

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

Update、2016年6月: NSPersistentStoreCoordinatorの最新のドキュメント の時点で、iCloudを使用したCore Dataに関連するすべてのものが非推奨としてマークされています。その結果、おそらく新しい開発では避けるべきです。

179
Tom Harrington