【发布时间】:2010-09-22 21:54:50
【问题描述】:
我知道这是一个常见问题,但我发现的解决方案似乎都不适合我。
这是我的情况: 我的应用程序有一个数据模型,我想向它添加版本控制。所以在 XCode 中,我做了设计 -> 数据模型 -> 添加模型版本。我还更新了我的委托的 persistentStoreCoordinator 方法,如下所示:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory]
stringByAppendingPathComponent: @"foo.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:options error:&error]) {
/*Error for store creation should be handled in here*/
}
return persistentStoreCoordinator;
}
为了确保一切正常,我在模拟器中进行了清理、构建和测试。到目前为止一切正常。
接下来我选择了新版本数据模型,使用 XCode 将其设置为当前版本,并为实体添加了一个额外的属性。然后我做了一个干净的一切,构建。现在,每当我启动应用程序时,它都会因以下错误而崩溃:“无法将模型与名为 'foo' 的两个不同实体合并”。
我做错了什么?我已经尝试确保没有数据模型被添加到目标,只将当前版本的数据模型添加到目标,以及两者。每次测试时,我都会确保全部清洁。
谁能解释一下为什么它对我不起作用?
编辑:
这是我的 managedObjectModel 方法:
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
return managedObjectModel;
}
【问题讨论】:
-
请添加您的 -(NSManagedObjectModel*) managedObjectModel 方法。我怀疑那里的问题。
标签: iphone core-data migration