使用框架中的CoreData时如何解决“类'ClassName'的NSManagedObject必须具有有效的NSEntityDescription”

Posted

技术标签:

【中文标题】使用框架中的CoreData时如何解决“类\'ClassName\'的NSManagedObject必须具有有效的NSEntityDescription”【英文标题】:How to fix "An NSManagedObject of class 'ClassName' must have a valid NSEntityDescription" when using CoreData from a framework使用框架中的CoreData时如何解决“类'ClassName'的NSManagedObject必须具有有效的NSEntityDescription” 【发布时间】:2018-02-14 15:39:25 【问题描述】:

我在一个框架中分离了我的数据访问层 (DAL),以便能够在应用程序及其 Today 小部件中使用它。我设置了所有内容并编译了它,但在运行时当我尝试创建NSPersistentContainer 时,应用程序因臭名昭著的An NSManagedObject of class 'ClassName' must have a valid NSEntityDescription 而崩溃。

我尝试了什么:

检查持久化容器的名称是否与数据模型相同 selecting Current Product Module for the model class module

【问题讨论】:

【参考方案1】:

有什么帮助:

检查所有将使用CoreData 作为xcdatamodeld 文件的目标

为此:

    选择Project Navigator中的xcdatamodeld文件 在右侧打开Utilities 打开File Inspector 检查Target Membership下所有需要的目标

【讨论】:

【参考方案2】:

在将数据层移动到框架时,我也遇到了同样的问题。问题是NSPersistentContainer 默认在主包中查找实体描述,除非我们创建自定义子类。

所以解决方案是在嵌入式框架中创建NSPersistentContainer的自定义子类,并使用它来代替父类。它应该可以解决问题。

【讨论】:

【参考方案3】:

在我的情况下,它在我更改时已修复

let container = NSPersistentContainer(name: "Your Project Name Here")

let container = NSPersistentContainer(name: "Your Data Model Name Here")

在 Appdelegate.Swift 中

【讨论】:

以上是关于使用框架中的CoreData时如何解决“类'ClassName'的NSManagedObject必须具有有效的NSEntityDescription”的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 AppDelegate 中的 coreData 错误?

CoreData 应用程序中的“保存”

如何从 WatchKit Extension 调用 CoreData 代理框架?

如何覆盖核心数据中的数据?如何解决Core Data中的重复数据?

SwiftUI - 如何在 CoreData 中删除实体中的行

如何在 Swift 中使用 MagicalRecord CoreData 删除 tableview 中的记录