以前のバージョンを完全に書き直した 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 でモデルが見つからなかったことを示しています。