2012-04-17 2 views
2

SenTestCaseでCoreDataを使用しようとしています。問題は見つからないNSManagedObjectModelです。私はアプリケーションバンドル内のママファイルを検索してURLで初期化しようとしましたが、見つけられませんでした。そのため、私は次のように切り替えました。NSManagedObjectModelがmergedModelFromBundlesで初期化されました:nilがSenTestCaseでモデルを見つけられません

これは正しく動作しますが、メインアプリケーションでのみ機能します。私はSenTestCaseでそれを実行しようと戻っobjectModelは、任意のエンティティを持っていない:

(gdb) po objectModel 
(<NSManagedObjectModel: 0xab72480>) isEditable 0, entities { 
}, fetch request templates { 
} 

私はお母さんファイルを生成するために必要なセットアップの種類を知っていないことを認めざるを得ません。 .xcdatamodeldファイルを、アプリケーションのターゲットとテストターゲットのコンパイル済みソースのリストに追加しました。

次のコードは、アプリケーションのViewController viewDidLoadメソッドでは正常に動作しているが、SenTestCaseクラスのテストケースで働いていません。

- (void)testCoreData { 
    NSManagedObjectModel *objectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; 


    NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init]; 


    NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: objectModel]; 
    [context setPersistentStoreCoordinator: coordinator]; 

    NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
    url = [url URLByAppendingPathComponent:@"TestDatabase"]; 

    NSLog(@"Path: %@", url); 

    NSError *error; 

    NSPersistentStore *newStore = [coordinator addPersistentStoreWithType:NSSQLiteStoreType 
                 configuration:nil 
                    URL:url 
                   options:nil 
                   error:&error]; 

    if (newStore == nil) { 
     NSLog(@"Store Configuration Failure\n%@", 
       ([error localizedDescription] != nil) ? 
       [error localizedDescription] : @"Unknown Error"); 
    } 

    TaskSet *taskSet = [NSEntityDescription insertNewObjectForEntityForName:@"TaskSet" 
               inManagedObjectContext:context]; 
    taskSet.taskSetId = @"1234"; 

    NSLog(@"TaskSet: %@", taskSet); 
    NSError *saveError; 
    if ([context save:&saveError]) { 
     NSLog(@"Store Saved successfully"); 
    } else { 
     NSLog(@"Store not saved! Error: %@", saveError); 
    } 
} 

エラー:

Catchpoint 3 (exception thrown).Unknown.m:0: error: -[ControllerTest testCoreData] : +entityForName: could not locate an entity named 'TaskSet' in this model. 

差とは何ですかSenTestCaseで実行し、viewDidLoadで実行していますか?コアデータモデルをテストケースにコンパイルするには、何が必要ですか?

答えて

2

前に、この質問には回答されている:クレジットはSenTestCasesがメインバンドルを使用していないことを指摘しルーサー・ベイカーに行くUnit Test can't find Core Data model file

。データをファイルに書きたい場合は、その答えに記述されているように識別子を持つバンドルを作成する必要があります。

関連する問題