25

Core Data を使用する iPhone アプリがあります。

更新を行い、Lightweight Migration を使用して MOM (Managed Object Model) の V1 から V2 に移行しました。これは完璧に機能しました。

MOM の V3 (およびそれ以降) に移行したい場合はどうなりますか?

  • 軽量移行を続行することにした場合、MOM の V1 から V3 および V2 から V3 への移行は自動的に処理されますか、それとも追加の操作が必要ですか?
  • マッピング モデルを使用する場合はどうなりますか? V1 と V2 の両方の MOM を V3 にアップグレードするにはどうすればよいですか? V1 から V3 および V2 から V3 の両方のマッピング モデルを作成する必要がありますか?
  • この質問はさらに続きます... V6 MOM を使用していて、V1 MOM からのアップグレードの可能性をサポートする必要がある場合はどうなりますか?

もう 1 つの質問は、現在の MOM のバージョンを確認する最善の方法は何かということです。isConfiguration:compatibleWithStoreMetadata を使用する必要がありますか:

ご協力ありがとうございます。私はコアデータが大好きです。しかし、頭がぐるぐるして混乱することもあるので、賢者の知恵を求めています。

4

2 に答える 2

7

最初の投稿は何ヶ月も前のことですが、最高の答えは Marcus Zarra の Core Data book (またはオンラインのコード例) にあると思います。Google で「progressivelyMigrateURL」を検索すると、モデルを段階的に反復するためのコードが見つかります。これにより、モデル n からモデル n+1 へのマッピングを作成でき、モデルのすべてのペアリング間のマッピングを作成するための組み合わせの爆発を心配する必要がなくなります。

これにより、実行時の移行が遅くなる場合があります。これについては調べていません。

于 2010-05-17T16:49:40.083 に答える
2

createDestinationInstancesForSourceInstance を使用して通常の移行を行いました。
このスニペットは、そのメソッドをオーバーライドする方法と、移行するモデルの sourceVersion を取得する方法を示しています。実際の移行はヘルパー クラス TZMigrationHelper で行われます。

- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error
{
    float sourceVersion = [[[mapping userInfo] valueForKey:@"sourceVersion"] floatValue];
    if(sourceVersion <= 0.9)
    {
        mapping = [TZMigrationHelper addAttributeMappingForDerivedRTFProperties:sInstance mapping:mapping propertyName:@"someProperty"];
        mapping = [TZMigrationHelper addAttributeMappingForDerivedRTFProperties:sInstance mapping:mapping propertyName:@"anotherProperty"];
        mapping = [TZMigrationHelper addAttributeMappingForDerivedRTFProperties:sInstance mapping:mapping propertyName:@"oneMoreProperty"];     
    }
    return [super createDestinationInstancesForSourceInstance:sInstance entityMapping:mapping manager:manager error:error];
}  
于 2009-10-13T07:55:36.860 に答える