2011-10-20 8 views
4

としては、(軽量 移行がサポートされている)マッピング・モデルを使用してApple documentationのiCloud、コアデータ、マイグレーションモデルマッピング

スキーマの移行がサポートされていませんで述べています。

私たちはのiCloud fonctionnalityとマッピングモデルの移行に対処する必要がある場合は、我々が持っているオプションについて思っていた

...私は、私は自分のアプリケーションに機能を追加するために、将来的に自分のコアデータモデルを変更する必要があることを知っています(軽量であるだけでなく)。既存のモデルエンティティとの関係を設定することはできません。

私はそのような順序を考えていた:

1 - 私のコアデータモデルのマッピングの移行をやって私のアプリを起動する

2 - それは

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

私がやって考えていたことを避けるために:

1を - それはiCloudの

2と同期させる私のアプリを起動する - 私のコアデータモデル

3のマッピングの移行を行います - 古いiCloudデータを削除する

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

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

ありがとうございました。

+0

iCloudキー値を使用してモデルバージョンを保存してから、永続的なストアコーディネータを作成するか、モデルマッピングを行う前にチェックすることができます。 iCloudとCore Dataの使用がまだ安定していないことを示すアップルのiCloudフォーラムで利用可能なiPhoneRecipesの例を今のところ持っていたいと思います。同期が成功するとは限らず、iCloudへの接続が失敗することがあります。 Appleからのアップデートの前にCore Dataと組み合わせてiCloudを使用しないと思う。 – dMathieuD

答えて

2

本物のアプリでiCloudでコアデータを使用することはお勧めしません。

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

移行は別の問題です。軽量な移行はかなりうまく機能します。ただし、マッピングモデルの移行作業を行うには、既存のiCloud「ubiquityフォルダ」からコンテンツを消去/削除し、新しい名前で新しい名前を作成し、NSPersistentStoreUbiquitousContentURLKeyに関連付けられた値を変更する必要があります。そして、あなたはすべてのクライアントが同じことをすることを確認する必要があります。その複合体だが行ける。しかし、その価値があるかどうかわからない...

バージョンの互換性の問題についてはまだ試していませんが、バージョンが一致するかどうかをManagedObjectModelの "compatibleWithStoreMetadata"メソッドで確認してください。

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

// Check compatibility 
BOOL isCompatible = [myModel isConfiguration:nil compatibleWithStoreMetadata: metadataFromTransactionLogEntry]; 
関連する問題