0

以前のバージョンを完全に書き直した iPhone アプリがあります。しかし、ユーザーが新しいバージョンを入手すると、一部のエンティティの名前が似ているため、Core Data の問題が発生します。古いデータモデルをまったく使用したくありません。

データモデルをマージせず、代わりにinitWithContentsOfUrlを使用することに関するSOの投稿を見ました。ただし、すべての例では、最初に[NSBundle allBundles]を取得し、これを反復処理して目的の DataModel を見つけるように指示しています。 https://groups.google.com/d/msg/restkit/6_iu2mLOgTo/mjwz2fSmHG4J

コア データ: エラー、「'foo' という名前の 2 つの異なるエンティティを持つモデルをマージできません」

// Look for our managed object model in all of the bundles. (From the app
  // it is in the main bundle but not for unit tests.)
  NSString *modelPath = nil;
  for (NSBundle* bundle in [NSBundle allBundles])
  {
    modelPath = [bundle pathForResource:@"MyDataModelFilename" ofType:@"momd"];
    if (modelPath)
      break;
  }
  NSAssert(modelPath != nil, @"Could not find managed object model.");
  NSManagedObjectModel* mom = [[NSManagedObjectModel alloc] 
                               initWithContentsOfURL:[NSURL fileURLWithPath:modelPath]];

  objectManager.objectStore = 
    [RKManagedObjectStore objectStoreWithStoreFilename:_databaseFilename 
                                 usingSeedDatabaseName:nil 
                                    managedObjectModel:mom 
                                              delegate:nil];

ただし、これを行うと、allBundlesにはオブジェクトが 1 つしかなく、その URL は、特定の「.xcdatamodeld」ファイルではなく、.app ファイル自体への URL です。

では、特定の '.xcdatamodeld' ファイルを指定するにはどうすればよいでしょうか? 独自の URLPath をハードコーディングしようとしましたが、割り当てられた MOM は常に nil です。これは、その URL でモデルが見つからなかったことを示しています。

4

1 に答える 1

-2

これは、ユーザーにとって非常に不快な体験になります。ただし、新しいモデルとは異なる名前で永続ストアを作成できます。

于 2013-03-02T20:16:55.413 に答える