Swift 3 核心数据 NSInternalInconsistencyException entityForName 无法在此模型中找到名为 Foo 的实体
Posted
技术标签:
【中文标题】Swift 3 核心数据 NSInternalInconsistencyException entityForName 无法在此模型中找到名为 Foo 的实体【英文标题】:Swift 3 Core Data NSInternalInconsistencyException entityForName could not locate an entity named Foo in this model 【发布时间】:2017-05-30 17:33:28 【问题描述】:我有一个框架项目,当我尝试对我的类进行单元测试时遇到了奇怪的错误。
这是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 自动生成的代码中获取上下文,但它崩溃并出现相同的错误,就好像它没有看到我的 .xcdatamodeld
定义一样。
注意:我检查了所有拼写错误,没有丢失任何文件。
也许框架项目中不允许有核心数据? 非常感谢框架项目中核心数据使用的任何链接或示例。
【问题讨论】:
【参考方案1】:您可以在框架中使用 Core Data,但您需要确保您的代码知道它在框架中。最可能的问题来源是这一行:
let managedObjectModel = NSManagedObjectModel.mergedModel(from: [Bundle.main])!
如果您在框架中,则您的模型不在主包中。你告诉它在错误的地方寻找,所以它没有找到模型文件。
您可能希望将其更改为 Bundle(for: type(of:self))
,以便查看包含框架类的同一个包。
【讨论】:
感谢汤姆的回答,看起来它解决了上下文创建的问题,但现在还有另一个问题。它说:CoreData:警告:无法为实体“MyClass”加载名为“MyFramework.MyClass”的类。找不到类,而是使用默认的 NSManagedObject。无法将“NSManagedObject_MyClass_”类型的值转换为“MyFramework.MyClass”,知道为什么吗? MyClass 是自动生成的公共类 在多次尝试做同样的事情后确定,即删除 xcdatamodeld 模块,然后重新创建它开始在测试中工作的类。但仍然无法在实际项目中使用我的框架,看起来它没有看到 xcdatamodeld。以上是关于Swift 3 核心数据 NSInternalInconsistencyException entityForName 无法在此模型中找到名为 Foo 的实体的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSFetchedResultsController 核心数据重新排序 TableView 单元格 - Swift 3