找不到类,而是使用默认的NSManagedObject

时间:2014-09-16 12:49:20

标签: ios objective-c core-data ios8

IOS 8中的核心数据存在问题。每当我想使用insertNewObjectForEntityForName方法时,我都会得到

  

未找到类,而是使用默认的NSManagedObject。

错误讯息。我使用objective-c,我没有使用IOS 7这个问题。也可能有任何问题,因为在我的工作区有两个项目,一个包含核心数据相关代码,另一个包含UI。

7 个答案:

答案 0 :(得分:30)

使用Swift时,如果源文件包含在 Build Phases>中,则仍然会出现错误。编译源错误

  

无法加载名为' ...'对于实体' ...'。   找不到类,而是使用默认的nsmanagedobject。

要解决此问题,您可以在模型检查器中为特定模型类添加前缀(此处使用 MyApp )。 See also the documentation

enter image description here

我们可以在快速类声明之前添加objc(Person)

@objc(Person)
class Person: NSManagedObject {
   ...
}

答案 1 :(得分:21)

这是@ High6

提供的答案的更新版本

从Xcode 7开始,有Module属性可以设置为Current Product Module(它会自动显示),因此您不需要使用前缀。

Xcode Core Data editor

答案 2 :(得分:13)

该错误意味着您已在模型编辑器中为实体类型配置了自定义类名,但该类在运行时不存在。核心数据依赖于使用实体类型创建通用NSManagedObject

假设类文件实际存在于某处,问题是您没有在Xcode中的应用程序目标中包含该文件。由于Xcode支持多个目标,项目等,因此它不会自动包含每个构建中的每个源文件。将Core Data子类文件添加到应用程序目标,此错误应该消失。

答案 3 :(得分:13)

这个问题有一个类似的答案。在我的情况下,我使用的是Objective-C,并在控制台中解决了这个错误。

我在这里找到答案:Unable to find specific subclass of NSManagedObject

您可以清空“模块”字段(它将显示“无”)并使用@objc(类名)标记托管对象子类

enter image description here 这为我修好了。

答案 4 :(得分:9)

如果您使用的是Xcode 7测试版,实际的解决方案是删除 @objc(Person)。必须是模板中用于在Xcode 7 beta中生成实体类的错误。

答案 5 :(得分:0)

当没有一个解决方案适合我时,我删除了现有的解决方案 NSManagedObject并创建了一个新的。如果需要上一个对象中的任何代码,请记住进行备份,然后将其复制到新的NSManagedObject类中。 希望这有助于某人。

答案 6 :(得分:0)

SPM 有这个问题。

我的模型正在从 Bundle.module 加载。但是在运行时尝试访问它们时找不到任何类