我有一个框架项目,当我尝试对我的类进行单元测试时会遇到这个奇怪的错误。
这是Andrew Bancroft建议的内容NSManagedObjectContext
func setUpInMemoryManagedObjectContext() -> NSManagedObjectContext {
let managedObjectModel = NSManagedObjectModel.mergedModel(from: [Bundle.main])!
let persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel)
do {
try persistentStoreCoordinator.addPersistentStore(ofType: NSInMemoryStoreType, configurationName: nil, at: nil, options: nil)
} catch {
print("Adding in-memory persistent store failed")
}
let managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = persistentStoreCoordinator
return managedObjectContext
}
但每当我尝试通过此代码插入对象(或任何其他数据库操作)时
let newLocationMO = NSEntityDescription.insertNewObject(forEntityName: table, into: context) as! LocationMO
它因标题中提到的错误而崩溃。
我还尝试使用真实的上下文进行测试,因此我将我的框架导入临时项目并从AppDelegate自动生成的代码获取上下文但它崩溃时出现相同的错误,就好像它没有看到我的{{1} }定义。
注意:我检查了所有拼写错误,并且没有丢失文件。
也许不允许在框架项目中使用Core Data? 框架项目中核心数据使用的任何链接或示例都受到高度赞赏。
答案 0 :(得分:1)
您可以在框架中使用Core Data,但您需要确保您的代码知道它在框架中。最可能的麻烦来源是这一行:
let managedObjectModel = NSManagedObjectModel.mergedModel(from: [Bundle.main])!
如果您在框架中,则您的模型不在主捆绑中。你告诉它要找错了地方,所以它找不到模型文件。
您可能希望将其更改为Bundle(for: type(of:self))
,以便您可以查看包含框架类的同一个包。