4

Appleのドキュメントで述べたように

マッピングモデルを使用したスキーマ移行はサポートされていません(軽量移行がサポートされています)。

iCloudの機能とマッピングモデルの移行に対処する必要がある場合に備えて、どのようなオプションがあるのか​​疑問に思っていました...将来、アプリケーションに機能を追加するためにCore Dataモデルを変更する必要があることを知っています(軽量な方法)。問題は、どの新しいエンティティが必要になるのか、以前のモデルエンティティとのどの関係が設定されるのか、今は言えないということです。

私はそのようなシーケンスについて考えていました:

1-コアデータモデルのマッピング移行を行うアプリを起動します

2-iCloudと同期させる

これは、iCloudに新しいモデルに適合したトランザクションログファイルが含まれている場合に機能します。古いトランザクションログファイル(古いモデルに適合したもの)の場合、失敗します。

それを避けるために、私は次のことを考えていました。

1-アプリを起動してiCloudと同期させます

2-コアデータモデルのマッピング移行を行う

3-古いiCloudデータを削除して新しいデータで更新する

これは、iCloudに更新されたトランザクションログファイルがすでに含まれている場合は機能しません(新しいモデルに適合していることを意味します)。

私が必要としているのは、iCloudのトランザクションログが私の現在のコアデータモデルと互換性があるかどうかを確認する方法です。これを行う方法はありますか?

ありがとう。

4

1 に答える 1

2

実稼働アプリで Core Data を iCloud とともに使用することはお勧めしません。

十分に安定していません。アプリが iCloud 設定で有効/無効になっているかどうかを確認する簡単な方法はありません。また、ユーザーが iCloud サポートを有効にした後に無効にした場合に発生する可能性がある問題については言及しません。

移行は別の問題です。軽量移行はかなりうまく機能します。ただし、マッピング モデルの移行を機能させるには、既存の iCloud の「ユビキタス フォルダー」からコンテンツを一掃/削除し、(新しい名前で) 新しいフォルダーを作成し、NSPersistentStoreUbiquitousContentURLKey に関連付けられた値を変更する必要があります。そして、すべてのクライアントが同じことを行うようにする必要があります。複雑ですが実行可能です。その価値があるかどうかはわかりませんが...

バージョンの互換性の問題については、まだ試していませんが、iCloud トランザクション ログからストア メタデータを取得し、ManagedObjectModel の「compatibleWithStoreMetadata」メソッドを使用して、バージョンが一致するかどうかを確認することをお勧めします。

// Get current model
NSManagedObjectModel *myModel = [self managedObjectModel];

// Check compatibility
BOOL isCompatible = [myModel isConfiguration:nil compatibleWithStoreMetadata: metadataFromTransactionLogEntry];
于 2012-01-17T15:22:08.443 に答える