iphone - 添加新属性时 CoreData 无法完成错误

标签 iphone core-data

当我尝试访问新数据模型中的新属性时,收到“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/

相关文章:

iphone - 在 iPhone 上完成聊天的不同方式

iOS 如何从 url 打开应用程序或重定向到应用程序商店以下载应用程序

android - 视口(viewport)元标记在 iPhone 和 Android 中不起作用

IOS如何快速删除核心数据中的对象

iphone - NSFetchedResultsController 不处理某些部分驱动的移动

iphone - iPhone应用程序中的Twitter登录

iphone - UITableViewCell backgroundView 在不应该被重用时被重用

ios - 保存到多个实体 - 核心数据 - Swift

ios - indexPathForObject 返回 nil

ios - NSFetchedResultsController 调用 didChangeObject 删除而不是更新