【问题标题】:Class not found, using default NSManagedObject instead找不到类,而是使用默认的 NSManagedObject
【发布时间】:2014-11-10 05:31:26
【问题描述】:

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

找不到类,使用默认的 NSManagedObject。

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

【问题讨论】:

    标签: ios objective-c core-data ios8


    【解决方案1】:

    使用 Swift 时,如果源文件包含在 Build Phases > Compile Sources 中,错误仍然可能出现

    无法为实体“...”加载名为“...”的类。 未找到类,改用默认的 nsmanagedobject。

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

    您可以在 swift 类声明之前添加objc(Person)

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

    【讨论】:

    • @objc() 也对我有用。但是,删除“类”部分并只保留“名称”也是如此,这对某些人来说可能是一个更好的解决方案。谢谢High6
    • Xcode 12.4 会自动删除 '.'当你按下 Enter 键时。
    【解决方案2】:

    这是@High6 提供的答案的更新版本

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

    【讨论】:

    • 这是我通常忽略的——根据我的经验,最常见的“快速修复”这个错误就是这样做。
    【解决方案3】:

    这个问题也有类似的答案。在我的例子中,我使用的是 Objective-C,并且这样做消除了控制台中的这个错误。

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

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

    这为我解决了问题。

    【讨论】:

      【解决方案4】:

      该错误表示您已在模型编辑器中为实体类型配置了自定义类名,但该类在运行时不存在。 Core Data 依赖于使用实体类型创建通用 NSManagedObject

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

      【讨论】:

      • 成功了,我把 .h 和 .m 文件都复制到了编译源,现在没有警告了。
      • 对我来说这是因为我创建了一个NSManagedObject 子类,但是自动生成器没有将类名包装在@objc 中(即使我的项目是在Swift 中的)。例如,对于Temperature 的类声明,添加@objc(Temperature)
      • 不能用于 XCtest 用例。
      • 这会导致另一个错误。我们应该有办法避免在测试目标上添加这些东西。
      • 向 Apple 提出问题并希望得到最好的结果。他们不看这个网站,所以直接告诉他们。
      【解决方案5】:

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

      【讨论】:

      • 这也对我有用。 Swift 就是这样一种动态变化的语言。总有一天,它会安定下来……
      • 在向模型添加实体的迁移后遇到了问题。 Core Data 似乎无法看到与新实体相关的新创建的类。在新类中删除 objc() 对我有用......但是现在在项目中,我有一个带有 objc 的新类和所有其他没有 objc 的旧类(旧类仍然有效)。
      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        SPM 有这个问题。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-12
          • 2021-12-02
          • 1970-01-01
          • 1970-01-01
          • 2014-09-24
          相关资源
          最近更新 更多