我需要为我的核心数据模型添加一些属性,并且我很难让轻量级迁移工作!
我不断收到错误“无法将模型与两个名为blah的不同实体合并”。
这就是我所做的......
将此代码添加到我的应用代理中。
(NSPersistentStoreCoordinator *)persistentStoreCoordinator {
// blah blah
NSDictionary * options =
[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES],NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES],NSInferMappingModelAutomaticallyOption,nil];
// blah blah
return _persistentStoreCoordinator;
}
点击我的数据模型,转到Design>数据模型>添加模型版本。
将我的更改改为最低编号,基本上添加了一些属性。
删除了我之前模型生成的所有托管文件,将其发送到垃圾箱,然后从新模型中创建新文件。
清理所有目标。
构建并继续。
ERROR。
请帮忙。我已经尝试了很多不同的方式和其他东西,每次都回到我项目的干净副本并重新开始,没有任何东西让我超过这个错误。
谢谢!
答案 0 :(得分:4)
好吧,再一次,我生命中的另外6个小时完全被浪费了,因为苹果是一堆......好吧,我会停在那里。
无论如何,多亏这位可爱的人:http://linkroller.com/fullpage/ad/13754/?http://iphonedevelopment.blogspot.com/2009/09/core-data-migration-problems.html我能够解决问题。
您按照我已经遵循的步骤进行操作,然后您需要找到以下方法:
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
return managedObjectModel;
}
并将其更改为:
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
NSString *path = [[NSBundle mainBundle] pathForResource:@"Foo" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
return managedObjectModel;
}
其中foo是你xcdatamodeld文件的名称。
AAAAAARGH。
答案 1 :(得分:1)
我修复了核心数据迁移
请参阅此步骤
去AppDelegate.m写函数
-(NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (__persistentStoreCoordinator != nil)
{
return __persistentStoreCoordinator;
}
NSString *databaseFilePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"sampleiOS.sqlite"];
NSURL *storeUrl = [NSURL fileURLWithPath: databaseFilePath];
NSDictionary *_option = [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:_option error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
return __persistentStoreCoordinator;
}
然后选择example.xcdatamodeld文件
点击顶部的编辑菜单=>添加模型版本=>创建新的模型版本“example 2.xcdatamodel”,然后单击“完成”按钮。
现在显示两个核心数据模型,第一个是源“example.xcdatamodel”,另一个是目标“example 2.xcdatamodel”。
现在在新版本数据模型“example 2.xcdatamodel”中添加属性或实体。然后单击组数据模型“example.xcdatamodeld”。之后设置当前版本为新创建的数据模型“example 2.xcdatamodel”。
如何设置当前版本
选择show utilities => show inspector =>版本化的核心数据模型。然后设置当前版本。