酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Cocoa error 134130. が発生したときの対応

Core Dataのデータモデルソースが複数あるため、ManagedObjectModelを取得する際に、以下のように書いていると、Cocoaフレームワークがよしなに計らって適切なデータモデルソースを取得してくれます。

managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];

ただ、マイグレーションの為などで、複数のデータモデルソースがある場合、どれを使用するかわからなくなってしまい、Cocoa error 134130. が発生してしまうことがあるようです。

Unresolved error Error 
Domain=NSCocoaErrorDomain 
Code=134130 UserInfo=0x1458410 
“Operation could not be completed. (Cocoa error 134130.)”, {   (省略)
   reason = “Can’t find model for source store”; }

明示的にどのデータモデルを使用するのか指定する必要があります。以下の様にコードを書けば問題なく処理が完了されませんでしょうか。

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"DataModel" ofType:@"momd"];
NSURL *urlModel = [NSURL fileURLWithPath:modelPath];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:urlModel];

参考サイト

http://stackoverflow.com/questions/3146515/iphone-core-data-lightweight-migration-cocoa-error-134130-cant-find-model-for-s http://cocoadays.blogspot.com/2010/12/iosmac-coredata-2.html