1

コア日付が統合されたアプリがあります。現在2つのエンティティが定義されており、アプリはすでにアプリストアで公開されています

次のリリースでは、将来のバージョンでエンティティをもう1つ追加したいのですが、シミュレーターでアプリを実行すると、次のエラーが発生します。

ストアを開くために使用されたモデルは、ストアを作成するために使用されたモデルと互換性がありません。

モデルに別のエンティティを追加したい場合はどうすればよいですか。

別のモデルオブジェクトを作成する必要がありますか?

注:既存のモデルに保存されている日付を失いたくありません。

4

2 に答える 2

1

モデルの新しいバージョンを作成し、移行を行う必要があります。(おそらくそれの音によって軽量です)。このリンクを見てください AppleLink

于 2012-09-10T12:58:56.700 に答える
0
  1. 自動移行の永続ストアオプションを設定します。

persistStoreCoordinatorの作成を次のように変更します(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 に答える