2010-09-10 102 views
2

我需要添加一些属性到我的核心数据模型,我有一个可怕的时间让轻量级迁移工作!核心数据轻量级迁移 - 无论合并模型

我不断收到错误“不能合并模型与两个不同的实体命名等等”。

这里是我做了什么......

  1. 将此代码添加到我的应用程序委托。

    • (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

      //等等等等

      的NSDictionary *选项= [NSDictionary的dictionaryWithObjectsAndKeys:
      [NSNumber的numberWithBool:YES],NSMigratePersistentStoresAutomaticallyOption,
      [NSNumber的numberWithBool :YES],NSInferMappingModelAutomaticallyOption,nil];

      //等等等等

      return _persistentStoreCoordinator;
      }

  2. 点击了我的数据模型,去设计>数据模型>添加模型版本。

  3. 对LOWEST数字进行了修改,基本上添加了一些属性。

  4. 删除我之前的模型生成的所有托管文件,将它们发送到垃圾箱,然后从新模型创建新的托管文件。

  5. 清理了所有目标。

  6. 建立和去。

错误。

请帮忙。我以各种不同的方式尝试了上述方法,并加载了其他的东西,每次回到我的项目的一个干净的副本并重新开始,没有任何东西让我超过这个错误。

谢谢!

回答

4

好吧,再一次,我的生命的另一个6小时完全浪费了,因为苹果是一堆......呃,我会在那里停下来。

无论如何,感谢这个可爱的人:http://linkroller.com/fullpage/ad/13754/?http://iphonedevelopment.blogspot.com/2009/09/core-data-migration-problems.html我能够解决这个问题。

你跟我已经遵循的步骤,那么你需要找到以下方法:

- (NSManagedObjectModel *)managedObjectModel { 

    if (managedObjectModel != nil) { 
     return managedObjectModel; 
    } 

    managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];  
    return managedObjectModel; 
} 

并将其更改为:

- (NSManagedObjectModel *)managedObjectModel { 

    if (managedObjectModel != nil) { 
     return managedObjectModel; 
    } 

    NSString *path = [[NSBundle mainBundle] pathForResource:@"Foo" ofType:@"momd"]; 
    NSURL *momURL = [NSURL fileURLWithPath:path]; 
    managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL]; 

    return managedObjectModel; 
} 

其中foo是你的名字xcdatamodeld文件。

AAAAAARGH。

1

我有固定的核心数据迁移

请follwing这个步骤

  1. 转到AppDelegate.m写功能

    -(NSPersistentStoreCoordinator *)persistentStoreCoordinator 
    { 
        if (__persistentStoreCoordinator != nil) 
        { 
        return __persistentStoreCoordinator; 
        } 
    
         NSString *databaseFilePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"sampleiOS.sqlite"]; 
    
         NSURL *storeUrl = [NSURL fileURLWithPath: databaseFilePath]; 
    
         NSDictionary *_option = [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:_option error:&error]) { 
    
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    
        } 
    
        return __persistentStoreCoordinator; 
    } 
    
  2. 然后选择example.xcdatamodeld文件

  3. 单击顶部的编辑器菜单=>添加模型版本=>创建新的模型版本“example 2.xcdatamodel”,然后单击完成按钮。

  4. 现在显示两个核心数据模型版本一是源“example.xcdatamodel”另一个是目标“示例2.xcdatamodel”。

  5. 现在在您的新版本datamodel“example 2.xcdatamodel”中添加属性或实体。然后单击组数据模型“example.xcdatamodeld”。之后,将当前版本设置为新创建的数据模型“example2.xcdatamodel”。

如何设置当前版本

选择显示公用事业=>显示检查=>版本的核心数据模型。然后设置当前版本。