Unit-Tests と Core Data で同じ問題が発生しました。
最初に「ストアのモデルが見つかりません」に出くわしました。このスレッドを使用してこれを修正しました:コマンド ラインから 'Cedar' 単体テストを実行中にエラーが発生しました
次に、同じエラーが発生しました:「ファイルの作成に失敗しました。コード = 2」
次に、URL を調べたところ、次のことがわかりました。
NSPersistentStoreCoordinator と NSManagedObjectModel の URL はかなり異なります。ただし、単体テストを行うときと、最初のエラーを修正した後でのみです。
通常、モデルは「/some/path/<DataModelFile>.app/<DataModel>.momd/」にあります。sqlite
は「some/path/Documents/<SQLiteFile>.sqlite」にあります。
そこで、次のコードを使用して、テストと実行の両方で正しい URL を取得します。
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
NSURL *modelURL = [bundle URLForResource:@"WinNav" withExtension:@"momd"];
basePath = @"";
NSArray *arr = [modelURL pathComponents];
for (int i=0; i<[arr count]-2; i++) {
basePath = [basePath stringByAppendingString:[arr objectAtIndex:i]];
if (i > 0) basePath = [basePath stringByAppendingString:@"/"];
}
NSLog(@"modelURL: %@", modelURL);
NSURL *storeUrl = [NSURL fileURLWithPath:[basePath stringByAppendingString:@"/Documents/Locations.sqlite"]];
私の記憶が正しければ、sqlite ファイルを保存する "Documents" フォルダーを作成する必要がありました。
これがうまくいくかどうか、またはそれをより良くする方法についてのコメント/提案は大歓迎です。