core data

1
Pocket

1

ひさびさにCoreDataの自動マイグレーション作業をしたところ、ハマったのでメモ。
問題があるとCan’t merge models with two different entities named ‘EntityName””; とエラー

1, CoreData定義ファイルを選択したあと、Editor -> Add Model Version を選択
元が「データベース名.xcdatamodeld」の場合、「データベース名 2.xcdatamodeld」が出来ている。

2, 「データベース名 2.xcdatamodeld」にAttributesを追加

3, インスペクタのVersioned Core Data Model の Correntを確認 「データベース名」が「データベース名2」になってるはず

4, Delegate.mに以下の箇所について追加、変更
4,1 – (NSManagedObjectModel *)managedObjectModel

[sourcecode]
– (NSManagedObjectModel *)managedObjectModel
{
if (managedObjectModel != nil)
{
return managedObjectModel;
}
NSString *path = [[NSBundle mainBundle] pathForResource:@"データベース名" ofType:@"momd"];
NSURL *url = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];
return managedObjectModel;
}
[/sourcecode]

4,2 – (NSPersistentStoreCoordinator *)persistentStoreCoordinator
[sourcecode]
– (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (persistentStoreCoordinator != nil)
{
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"データベース名.sqlite"]];

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

// if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil
URL:storeUrl options:options error:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return persistentStoreCoordinator;
}
[/sourcecode]

Leave a Reply