CoreData 持久存储出错 [重复]

Posted

技术标签:

【中文标题】CoreData 持久存储出错 [重复]【英文标题】:Error with CoreData Persistent Store [duplicate] 【发布时间】:2012-07-13 20:59:10 【问题描述】:

我正在使用基于 CoreData 的应用程序,并且有一个 AppDelegate 类,该类是在启动应用程序时固有地编写的。

单击按钮后,我将 ArrayController(Section1) 传递给子类并对其进行解析以存储 TableView Cell 值。

- (IBAction)saveSect1:(NSButton *)sender 

DataMiner *data = [[DataMiner alloc] init];
[data parseArrayController:Section1 tag:0];




-(void)parseArrayController:(NSArrayController *)myController tag:(NSInteger)arrayTag 

switch (arrayTag) 
    case 0:

        context = appDelegate().self.managedObjectContext;

        for (NSMutableDictionary *mydict in myController.arrangedObjects) 

            NSNumberFormatter *format = [[NSNumberFormatter alloc] init];
            NSNumber *code = [format numberFromString:[mydict objectForKey:@"diagCode"]];
            [format release];

            Section_1 *section = nil;

            section = [NSEntityDescription insertNewObjectForEntityForName:@"Section_1"   inManagedObjectContext:context];

            section.diagCode = code;
            section.diagDescr = [mydict objectForKey:@"diagDescr"];                            
            section.sectId = [NSNumber numberWithDouble:1];
            section.subSectId = [NSNumber numberWithDouble:1.1];

        

        NSLog(@"%@", context.registeredObjects);

        [Section_1 release];

        break;

    default:
        break;

最初它运行良好,但是,现在我收到此错误:

用于打开持久存储的托管对象模型版本与用于创建持久存储的版本不兼容。

以前有人遇到过这个错误吗?有什么建议么?谢谢。

- (NSManagedObjectModel *)managedObjectModel

if (__managedObjectModel) 
    return __managedObjectModel;


NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"CoreData_test"        withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return __managedObjectModel;

【问题讨论】:

这是针对该错误在 Google 上的第一次点击,我认为这很好地解释了这一点。 ***.com/questions/5572954/… 【参考方案1】:

您的桌子模型已更改。您可以删除旧数据库(从设备/模拟器中删除已安装的应用程序)。更改代码中的路径或进行数据库迁移。

通常在开发中我只是删除旧的安装。 (在模拟器中重置内容和设置)如果您需要保留填充的数据,那么您将需要执行迁移。

您需要在任何时候更改表格时执行此操作。

【讨论】:

感谢您的建议,这是针对基于 ios 的应用程序还是 MacOx?你能解释一下 TableModel,因为我正在使用几个 ViewController 类,每个类都使用一个单独的 NSTableView。我正在使用一个 MacOSX 应用程序,它使用了我在 AppDelegate 中添加的方法。 表模型可能是使用错误的术语...在您的项目中某处有一个 xcdatamodel 文件。在您编译并运行项目之后,您是否更改了其中的任何内容?如果是这样,则此项目的现有数据库副本不再与您的文件兼容。您将需要执行迁移或删除现有安装。 非常感谢,已经成功了! 很高兴我能帮上忙 :) 请尽可能给我投票!

以上是关于CoreData 持久存储出错 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 应用程序不会从持久存储中加载数据

Core Data 持久化存储异步保存

Core Data - 无法在 iOS 5.1 上创建持久存储

为啥使用 Core Data 的人想要在同一个托管对象模型中使用多个持久存储?

Core Data、iCloud 和两个持久性存储失败

Core Data 可以使用 Google Docs 作为持久性存储吗?