如何在已经存在的模型中添加实体

时间:2012-09-10 12:49:31

标签: ios core-data

我有一个集成了核心日期的应用。我目前已定义了2个实体,并且该应用已在应用商店中存在

在我的下一个版本中,我想在未来版本中添加一个实体,但是当我在模拟器中运行应用程序时,我收到以下错误

用于打开商店的模型与用于创建商店的模型不兼容。

如果我想在模型中添加其他实体,我该怎么办。

我应该创建另一个模型对象吗?

注意:我不想丢失现有模型中存储的日期。

2 个答案:

答案 0 :(得分:1)

您需要创建模型的新版本并进行迁移。 (听起来很轻巧)。看看这个链接 Apple Link

答案 1 :(得分:0)

  1. 设置自动迁移的持久存储选项:
  2. 将persistentStoreCoordinator创建更改为此(替换YOURDB):

    - (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    
      if (persistentStoreCoordinator != nil) {
        return persistentStoreCoordinator;
      }
    
      NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"YOURDB.sqlite"]];
    
      // handle db upgrade
      NSDictionary *options = [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:options error:&error]) {
        // Handle error
      }
    
      return persistentStoreCoordinator;
    }
    
    1. 版本化您的数据模型并编辑新文件

       - (NSManagedObjectModel *)managedObjectModel {
      
           if (managedObjectModel != nil) {
                 return managedObjectModel;
               }
      
      
      
             NSString *path = [[NSBundle mainBundle] pathForResource:@"YOURRESOURCENAME" ofType:@"momd"];
          NSURL *momURL = [NSURL fileURLWithPath:path];
                    managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
      
      
                return managedObjectModel;
              }