当我尝试访问新数据模型中的新属性时,收到“CoreData 无法满足...的错误”错误消息。如果我使用新数据,我没问题,但是当我尝试读取现有数据时,我收到错误。如果该属性不在我的原始数据中,我是否需要自己以不同的方式处理该实体?我的印象是 Core Data 可以为我处理这个问题。我的新属性被标记为可选,并具有默认值。
我创建了一个新的 .xcdatamodel(并将其设置为当前版本)并更新了我的 NSPersistentStoreCoordinator 初始化以利用轻量级迁移,如下所示:
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])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
感谢任何帮助。
更新: 经过更多挖掘后,我将 ManagedObjectModel 更新为:
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
//managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
NSString *path = [[NSBundle mainBundle] pathForResource:@"< MyModel >" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
return managedObjectModel;
}
这仍然没有解决我的问题。我已经清理并重建,但仍然没有爱。
最佳答案
你如何构建你的NSManagedObjectModel
?如果您向它传递一个可能会导致问题的特定文件,因为您可能正在加载项目中徘徊的较旧的原始 mom 文件。理想情况下,您现在应该加载 momd 包或仅使用以下命令加载包中的所有编译模型:
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
如果您收到错误,则表明您需要清理项目以摆脱陈旧的编译模型。
更新
由于这不是旧模型问题,因此我们转向下一种可能性。 plist 中的版本设置不正确。要检查这一点,请使用 finder 或终端查看 momd 包的内部并打开其中的 plist。检查以确认新模型确实设置为当前版本。
假设这不起作用,接下来在模拟器中运行您的应用程序并在创建 MOC 后立即保存它。之后,使用命令行工具打开 sqlite3 文件并检查架构以查看其是否已更新为新结构。
假设设置正确,您是否使用自定义 NSManagedObject
子类?
关于iphone - 添加新属性时 CoreData 无法完成错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2428720/