核心数据轻量级迁移 - 无法合并模型

时间:2010-09-10 03:15:43

标签: iphone objective-c xcode core-data

我需要为我的核心数据模型添加一些属性,并且我很难让轻量级迁移工作!

我不断收到错误“无法将模型与两个名为blah的不同实体合并”。

这就是我所做的......

  1. 将此代码添加到我的应用代理中。

    • (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

      // blah blah

      NSDictionary * options =     [NSDictionary dictionaryWithObjectsAndKeys:
          [NSNumber numberWithBool:YES],NSMigratePersistentStoresAutomaticallyOption,
          [NSNumber numberWithBool:YES],NSInferMappingModelAutomaticallyOption,nil];

      // blah blah

      return _persistentStoreCoordinator;
      }

  2. 点击我的数据模型,转到Design>数据模型>添加模型版本。

  3. 将我的更改改为最低编号,基本上添加了一些属性。

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

  5. 清理所有目标。

  6. 构建并继续。

  7. ERROR。

    请帮忙。我已经尝试了很多不同的方式和其他东西,每次都回到我项目的干净副本并重新开始,没有任何东西让我超过这个错误。

    谢谢!

2 个答案:

答案 0 :(得分: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 :(得分:1)

我修复了核心数据迁移

请参阅此步骤

  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”,另一个是目标“example 2.xcdatamodel”。

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

  6. 如何设置当前版本

    选择show utilities => show inspector =>版本化的核心数据模型。然后设置当前版本。