gpt4 book ai didi

objective-c - NSManagedObjectModel 使用 mergedModelFromBundles 初始化 :nil not finding model in SenTestCase

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:22:23 26 4
gpt4 key购买 nike

我正在尝试在 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 中运行有什么区别?我需要做什么才能将核心数据模型编译成测试用例?

最佳答案

这个问题之前已经回答过:Unit Test can't find Core Data model file

感谢 Luther Baker 指出 SenTestCases 没有使用主 Bundle。如果您想将数据写入文件,您必须按照他的回答中所述使用标识符创建包。

关于objective-c - NSManagedObjectModel 使用 mergedModelFromBundles 初始化 :nil not finding model in SenTestCase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10187496/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com