SenTestCase で CoreData を使用しようとしています。問題は、見つからない NSManagedObjectModel です。アプリケーションバンドルでmomファイルを検索してURLで初期化しようとしましたが、見つかりませんでした。そのため、次のように切り替えました。
NSManagedObjectModel *objectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
これは正しく機能しますが、メイン アプリケーションでのみ機能します。SenTestCase で実行しようとすると、返された objectModel にはエンティティがありません。
(gdb) po objectModel
(<NSManagedObjectModel: 0xab72480>) isEditable 0, entities {
}, fetch request templates {
}
mom ファイルを生成するためにどのようなセットアップが必要かはわかりません。アプリケーションのターゲットとテスト ターゲットのコンパイル済みソースのリストに .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 での実行の違いは何ですか? コア データ モデルをテスト ケースにコンパイルするにはどうすればよいですか?