1

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

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

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

如果我想在我的模型中添加另一个实体,我应该怎么做。

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

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

4

2 回答 2

1

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

于 2012-09-10T12:58:56.700 回答
0
  1. 为自动迁移设置 Persistent Store 选项:

将您的 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;
            }
    
于 2012-09-10T12:58:14.673 回答