2つの別々のxcdatamodelファイルで定義されたストアから移行するときに軽量移行を実行する際に問題が発生します。コアデータ - 軽量移行と複数のコアデータモデルファイル(xcdatamodel)
私のアプリのバージョン1.0では、モデルはアナリティクスモデル、モデル-A、およびモデル-Bのその他すべてに分けられました。コンパイルすると、モデルはグループ化され、すべてがスムーズに進行しました。
新しいバージョン1.1で作業しているときに、モデルBに新しいモデルバージョンを追加し、その新しいバージョンをアクティブとして設定することでモデルBをアップグレードしました。
1.0から1.1にアップグレードするときに問題が発生します。 Core Dataはモデルストアをディスク上でチェックし(バージョン1.0で作成)、それを記述するモデルを探しますが、ストア全体を定義するSINGLEモデルを見つけることはできません(モデルAは解析のみをカバーし、モデルBはカバーそれ以外はすべて)、「ソースストアのモデルが見つかりません」というエラーがスローされます。
モデルを分離するためのソリューションが見つかりましたが、カスタムマイグレーションを定義する追加の手間をかけずにアップグレード+軽量移行が可能です。ここで
はモデルをロードするために使用されるコードの抜粋です:
NSArray *modelNames = [NSArray arrayWithObjects:@"model-A", @"model-B", nil];
NSMutableArray *models = [NSMutableArray array];
for (NSString *name in modelNames)
{
LogInfo(@"loading model %@", name);
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:name withExtension:@"momd"];
NSManagedObjectModel *model = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL] autorelease];
[models addObject:model];
}
// combine all the separate models into one big one
objectModel = [[NSManagedObjectModel modelByMergingModels:models] retain];
NSURL *documentsDirectory = [NSURL fileURLWithPath:[SuperFileManager documentsDirectory] isDirectory:YES];
NSURL *storeURL = [documentsDirectory URLByAppendingPathComponent:@"database.sqlite"];
NSError *error = nil;
coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:objectModel];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
nil];
if (![coordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeURL
options:options
error:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
これに関する最新情報はありますか? – codepushr
@codingrogue - 残念ながら。私が当時取り組んでいたチームは、コアデータを使用して放棄し、私はAndroidプログラミングに切り替えました。ごめんなさい。 :/ – Mark