4

私はシダー テスト フレームワークを使用しており、コマンド ラインからテストを実行しようとしています。ビルドは次のエラーでクラッシュします:

Unresolved error Error Domain=NSCocoaErrorDomain Code=512 "The operation couldn’t be completed. (Cocoa error 512.)" UserInfo=0x6c5c6c0 {reason=Failed to create file; code = 2}, {
reason = "Failed to create file; code = 2";
}

テストは xcode から問題なく実行されますが、コマンド ラインから実行することはできません。何か案は?ありがとう

4

1 に答える 1

2

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" フォルダーを作成する必要がありました。

これがうまくいくかどうか、またはそれをより良くする方法についてのコメント/提案は大歓迎です。

于 2012-10-11T08:12:51.420 に答える