-1

我正在使用基于CoreData的应用程序,并且有一个AppDelegate类,它本身就是在启动应用程序时编写的。CoreData持久性存储区出错

当按钮单击时,我传递一个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; 
} 
+1

这是Google上第一次出现该错误的点击,我认为这很好解释。 http://stackoverflow.com/questions/5572954/error-after-adding-a-new-core-data-model-version – 2012-07-13 21:03:57

回答

0

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

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

无论您何时更换表格,您都需要这样做。

+0

我感谢你的建议,这是为基于iOS的应用程序或MacOx?你能解释TableModel,因为我正在使用几个ViewController类,每个类都使用单独的NSTableView.I正在使用MacOSX应用程序,并且它使用了我在上面添加的AppDelegate中的方法。 – user1505130 2012-07-14 00:23:13

+0

表模型可能是错误的术语......您的项目中有一处xcdatamodel文件。你已经编译并运行了这个项目后,你有没有改变它?如果是这样,那么该项目的数据库的现有副本不再与您的文件兼容。您将需要执行迁移或删除现有安装。 – Kibitz503 2012-07-16 17:55:59

+0

非常感谢,已经奏效! – user1505130 2012-07-23 14:21:20