私は現在、Ensembles を使用していくつかのテストを行っています。具体的には、Core Data ライトの移行をテストしています。
私の現在の構成は次のとおりです。
- データ モデル 1 でアプリを実行しているデバイス A
- データ モデル 2 でアプリを実行しているデバイス B
- データ モデル 2 はデータ モデル 1 に基づいており、オプションの文字列プロパティが 1 つ追加されています。
私のシナリオは次のとおりです。
- 最初に、デバイス A とデバイス B の両方でデータ モデル 1 を使用してアプリを実行すると、Ensembles (iCloud 構成) を使用してすべてが正常に同期されました。
- デバイス B で、データ モデル 2 を使用して更新したアプリをインストールして実行します
- デバイス A で、データ モデル 1 を使用して古いアプリを実行し続け、新しいレコードを追加します
- 結果: デバイス A に追加された新しいレコードが iCloud にアップロードされ、デバイス B に同期されます。
私の質問: 関連するデータ モデルが最新のものでない場合に、変更が iCloud にアップロードされないように Ensembles を構成できますか? (つまり、私の場合、デバイス A はデータ モデル 1 に基づいてオブジェクトをアップロードしますが、iCloud は既にデータ モデル 2 に基づいています)
前もって感謝します!
更新 1:
ドリューさん、ご回答ありがとうございます。Ensembles は分散型のピア ツー ピア システムであるため、アップロードを防止できない (そしておそらく防止すべきではない) ことに、私は間違いなく同意します。
理想的には、新しいデータ モデルを使用するデバイスが、古いデータ モデルに基づくデータを無視するようにしたいと考えています。(古いデータ モデルを持つデバイスが新しいデータ モデルに基づくデータを無視する既存の動作と同様の方法で)。それはサポートされていますか?
そうでない場合は、次のシナリオを例として検討してください。
- 古いデータ モデルには、タイトルと作成者の 2 つのプロパティを持つ「Book」というエンティティがあります (両方のフィールドはオプションではありません)。
- 新しいデータ モデルには、タイトル フィールドの最初の文字を保持する必要がある、titleFirstLetter と呼ばれる新しいオプション プロパティがあります。
現在、Ensembles が関与していない場合は、新しい NSManagedObject を永続ストアに保存するときに完全に制御できます。したがって、新しい本の追加を担当するアプリの更新されたコードは、タイトル フィールドから最初の文字を抽出し、それを新しい titleFirstLetter プロパティに保存するようにします。(つまり、Catch-22 というタイトルの本は、本が保存されると、titleFirstLetter プロパティに C が含まれます)。
さらに、コア データ スタックで軽度の移行が発生すると、それを検出し、データベース内の既存のすべての本を反復処理する 1 回限りの手順を実行し、タイトルの値に従って titleFirstLetter を設定します。この時点以降、データベースは一貫性があり有効であり、新しいコードにより、データベースに追加された将来の本がデータベースを有効に保つことが保証されます。
Ensembles に関して、古いデータ モデルを持つデバイスからの古いデータを制御できない場合、コードが呼び出されない場合、titleFirstLetter の新しいプロパティをどのように入力できますか?
親切なお力添えありがとうございます!