CloudKit
とCoreData
は自動的に一緒にシームレスに動作するわけではありませんので、自分でロジックを書き込む必要があります。
のdifferent types of iCloud storage options 1つまたは2つがありますがシームレスにCoreData
と統合んが、CloudKit
はそのうちの一つではない、とCloudKit
は、あなたが他の人とデータを共有するユーザーを有効にするの願望を持っている場合は、あなたが使用する必要がありますものです。
AKA:あなたは重労働をする必要がありますが、優れた設計方法を使用する場合は、既存のコードの多くを書き直すことなく作業を1回行うことができます。
だから、ここで私は両方のフレームワークを使用した私のプロジェクトの一つに何をしたかのようなものです:
あなたはほぼ確実に、すでに持っているようにコアデータ・オブジェクト・モデルとNSManagedObject
サブクラスを作成します。 Xcodeプロジェクト能力のCloudKit上
電源を入れて、あなたのレコードモデルは、あなたのコアデータのエンティティモデルをモデルにした(戻るXcodeで)
を設計する
使用CloudKitダッシュボード
CloudKitダッシュボードにログインメソッドを作成します。特定のCore Dataオブジェクトを
CKRecord
から作成する方法を知っていて、Core Dataオブジェクトから
CKRecord
を作成する方法を知っているどこかで(最も便利には、
NSManagedObject
サブクラスの拡張として)
CloudKitレコードを処理するための専用の1つ以上のSwiftクラスを作成し、コアデータと同期させます。このクラスはフェッチ、追加、削除、変更など、すべてのCloudKit操作を高いレベルで実行する責任があります。必要に応じてこのパブリックAPIを設計できます(ニーズに合わせてカスタマイズする必要があります)。クラスでは、前の手順で作成したメソッドを使用して、コアデータ型との間で変換する可能性が最も高くなります。このアプローチで
、クラスを専門にあなたのCloudKitは(私たちはCloudBrain
それを呼ぶことにします)重い物を持ち上げるのすべてを行い、あなたがしたい場合、あなたはそれが舞台裏でそれをすべて行うことができます。たとえば、コアデータマネージドオブジェクトコンテキストの変更を自動的にリッスンする別のクラスSyncBrain
を定義し、CloudBrain
の対応するメソッドを呼び出して、すべての変更がiCloudと同期されていることを確認できます。また逆もあり、iCloudの変更をリッスンしてCore Dataに適用する必要があります。これには当初、変更を最初にCloudBrain
から取得する必要があります。また、リアルタイム更新については、CKSubscription
を調べることも必要です。
このアプローチの美しさは、他のクラスがコアデータとやりとりするたびに、コアのすべての変更が自動的に確実に行われるように、すべてのコードを同じにしておくことですデータはiCloudに反映され、その逆も同様です。
他のユーザーと共有する場合、この機能はiOS 10の新機能で、AppleがまだCloudKit Quick Startを更新したようには見えません。したがって、今年はWWDCからWhat's New with CloudKitを視聴する必要があります。
重要なお知らせ:CloudKit Dashboardでレコードモデルを設計する場合は、iCloud Design Guideに従い、子レコードタイプの配列を保持するフィールドを持つ親レコードタイプを持たないようにしてください。これは素晴らしいパフォーマンスではありません。代わりに、親レコードを指す単一のCKReference
フィールドを持つように子レコードタイプを定義します。そうすれば、親に子供が必要な場合は、親を持つすべてのオブジェクトをあなたが望む親に設定するように要求するクエリを作成することができます(必要なときにすべての子をダウンロードするのを待つのではなく親)。
ここにはいくつかのWWDCセッションがあります。古いセッションには依然として非常に有用な情報が含まれていますが、一部のセッションには期限が切れています。
本当に助けになりました。私はおそらくそのルートに行くでしょう。私自身のロジックを記述し、 "汚い"データを追跡する必要がありますか?たとえば、ユーザーが時刻TにデバイスAのデータを入力した場合、最後の更新時刻がT-1のデバイスBのアプリを開き、T-1以降のすべての入力に対してiCloudからプルを行いますか? – Coder1224
@ Coder1224 CloudKitには変更タグのサポートが組み込まれていますが、いくつかのことに役立ちますが、すべてのアプリケーションが別の方法でデータを処理できるので、データが同期していないなどの処理が必要になります。 2014年、2015年、2016年のCloudKit WWDCセッションのいくつかを見ることは、この分野で有益な可能性が高いでしょう。私はいくつかのリンクで私のポストを更新します。 –
リンクをありがとう、私は実際にそれらのすべてを見た。彼らはすべてそれらの中で有用なものを持っており、私は第1が必須であることに同意します。彼らはすべて私がコアデータを使用しているものをローカルにキャッシュすることについて言及しています。私はすべてのデータをローカルに保管しても問題ないと思いますか?私は、WWDCの話し合いのいずれにも言及していませんでした。私は "タグの変更"と "CKFetchRecordChangesOperation"をたくさん使うと思います。 – Coder1224