2010-11-17 66 views
3

我有很多条的品类很多关系的核心数据。试图保存时,出现以下错误。我无法找到有关它的含义的信息,以及数据库为空时为什么有两个版本。任何人都可以点亮一下吗?iOS版:核心数据错误:NSMergeConflict为NSManagedObject

错误:NSMergeConflict (0x76ae720) for NSManagedObject (0xd945560) with objectID '0xd943550 <x-coredata://09A438A8-E3F5-45FE-B9D7-106798E82E18/Article/p91>' with oldVersion = 1 and newVersion = 2

代码:

NSMutableDictionary *dict = [[data objectAtIndex:i] valueForKey:@"category_names"]; 
     NSMutableArray  *values = [[NSMutableArray alloc] init]; 
     for (NSString *value in [dict allValues]) { 
      NSLog(@"value = %@", value); 
      [values addObject:value]; 
     } 

     NSMutableSet *setElements = [[NSMutableSet alloc] init]; 
     for (int i = 0; i < [values count]; i++) { 
      Category *cat = [self getCategoryFor:[values objectAtIndex:i]]; // Function which has fetch to get the category for the value "name" 
      [setElements addObject:cat]; 
     } 

     if ([setElements count] > 0) 
      [article addCategories:setElements]; 


     // Save the context. 
     NSError* error; 
     if (![managedObjectContext save:&error]) { 
      NSLog(@"Failed to save to data store: %@", [error localizedDescription]); 
      NSArray* detailedErrors = [[error userInfo] objectForKey:NSDetailedErrorsKey]; 
      if(detailedErrors != nil && [detailedErrors count] > 0) { 
       for(NSError* detailedError in detailedErrors) { 
        NSLog(@" DetailedError: %@", [detailedError userInfo]); 
       } 
      } else 
       NSLog(@" %@", [error userInfo]); 
     } 

     [article release]; 
     [values release]; 
     [setElements release]; 

回答

4

你获得不具有数据模型写两个不可调和的版本相同的持久性存储实际上与数据本身,而是造成的错误文件。

您必须已经创建了一个数据模型,用它的一些数据写入持久性存储,然后更新模型。这通常不是问题,除非您如此修改数据模型以使自动迁移无法合并旧数据和新数据。

如果这是仍在开发中,你不需要现有的数据,最简单的解决方法是删除该应用程序关闭模拟器,然后建立与仅使用最新的数据模型,再运行它。这将不需要迁移,因此将跳过合并错误。

+0

谢谢你的帮助。我将数据添加到sqlite,然后将sqlite添加到项目中。这似乎会导致某种类型的版本问题。我加入的代码所需要的所有数据,采取了DB了模拟器,它添加到项目中,问题就走开了。 – 2010-11-18 16:49:23

+0

这是非常困难的,直接添加数据到核心数据的SQL存储,因为它使用它自己的无证架构。 – TechZen 2010-11-18 18:10:07