0

Simperiumはコアデータの軽量移行をうまく処理できるはずだという別の回答を読みました。ただし、現在、(オプションの) プロパティを既存のエンティティに追加する単純なケースに苦労しています。

問題を理解しやすくするために、例を見てみましょう。以前のアプリ バージョンが 1.0 で、新しいバージョン 1.1fooがコア データ エンティティに新しいプロパティを導入したとします。

では、次のシナリオを考えてみましょう。

  1. デバイス A と B は両方ともバージョン 1.0 を実行し、同じ Simperium 同期アカウントに接続されており、どちらも最新です。
  2. fooデバイス A がバージョン 1.1 にアップグレードされ、プロパティがデータベースに作成され、ユーザーが新しいプロパティにデータを追加します。このデータは Simperium バックエンドに正しく同期されfoo、Web データ ブラウザーに表示されます。
  3. デバイス B (まだバージョン 1.0、つまり なしfoo) は Simperium と同期します。この時点で が表示されますが、これは存在しないSimperium warning: applyDiff for a member that doesn't existため理解できます。fooここではまだすべてが期待されており、問題ありません。
  4. ここで、デバイス B が 1.1 にアップグレードされます。アプリを初めて起動すると、Core Data によって新しいfoo列が作成されます。ただし、fooプロパティがそこにあるため、Simperium はまだバックエンドからデータを取得しないため、デバイス A と B はfoo!の同じデータを認識しません。

これが発生する理由を理解しています (Simperium は最初に変更を破棄しました。これは、プロパティがまだ存在していなかったためです。その後、可能になったときに同じ変更を再度適用しません)。しかし、これは非常に問題があり、事実上、データ モデルへの最も単純な変更でさえも非常に危険なものにしていると思います。ここで何か不足していますか?新しいプロパティをエンティティに追加する安全な方法は何ですか?

4

1 に答える 1