【问题标题】:Unknown class in interface builder界面生成器中的未知类
【发布时间】:2016-12-15 06:02:32
【问题描述】:

我知道关于这个主题有很多问题,但我已经尝试了其中的大部分来尝试解决,但没有成功。

问题: 起初我无法从助理编辑器添加我的课程,因为自定义课程没有选择它。

  1. 我确保调用继承自 uiviewcontroller
  2. 我确保将类添加到目标中
  3. 我试图删除类文件并重新添加它
  4. 最后我通过storyboard xml添加了这个类,它出现在了自定义类中

现在我正在尝试将我的按钮、视图等连接到它的插座。似乎它们已连接,但是在运行应用程序并打开该视图控制器时,应用程序崩溃并且调试器打印: “Interface Builder 文件中的未知类 xxx。” 然后 “此类不符合键 btnMenu 的键值编码。”

我已经检查过:

  1. 连接检查器设置正确(那里的插座没有错误)
  2. 试图删除派生数据
  3. 清理项目
  4. 重新安装应用

我什至尝试重新启动我的 mac,当然没有成功。

任何人都可以在这里遮遮掩掩吗? 谢谢。

【问题讨论】:

  • Storyboard 中自定义类下方的“模块”文本字段中有什么内容?
  • @Paulw11 它说“无”
  • 你在使用 Swift 吗?如果是这样,它应该说“当前 - projectname”你在模块下拉列表中看到了什么?
  • @Paulw11 我在 xcode 7.3.1 上使用目标 c
  • @Paulw11 下拉菜单为空

标签: ios iphone xcode storyboard


【解决方案1】:

我刚刚在 UIViewController 子类(使用 Xcode 9 beta 2 和 Swift 4)上发生了这种情况,解决方案是勾选“从目标继承”,我在 IB 中设置了自定义类。

如果您的视图恰好位于被复制到不同目标的.bundle 文件(例如框架/静态库)中,则您需要为每个 xib/storyboard 类设置一个显式模块目标,而不是而不是让它从托管它的目标继承。

【讨论】:

  • 如果 ** Inherit from target ** 已经被选中,取消选中它并选中它。它对我有用。
  • 拯救了我的一天。我不知道它是如何“取消勾选”的,但确实如此。
  • 它不起作用,我什至尝试选择并取消选择然后再次选择,但它仍然不起作用并且很快就会变得疯狂。尚未找到解决方案。
  • 在我的例子中,我已经包含了来自代码库的 Objective-C 部分的类,并将标题包含在桥接文件中。如果我勾选从目标继承模块,它会崩溃/失败,如果我取消它,它会成功。
  • 这个答案应该是最重要的,经过数小时的研究,我将添加我的解决方案,然后才意识到有人已经解决了它
【解决方案2】:

对我来说,问题是该课程不是目标会员的一部分。只需将类添加到目标,您应该会在界面生成器上看到它。这对我有帮助。

【讨论】:

  • 您为我节省了数小时的调试“此类不符合 'keyname' 的键值编码”错误,谢谢!
  • 很高兴!它有帮助!
【解决方案3】:

在查看控制器部分的自定义类中检查了名为“从目标继承模块”的刻度线后,它工作正常。可以关注图片。

要找到这个> 选择你的 view controller 黄色按钮 > 然后点击“Show Identity Inspector” > 然后选中名为“Inherit Module From Target

【讨论】:

    【解决方案4】:

    @Anthony Scott 提到的内容是正确的,直到您的 Framework_A 依赖于 Framework_B 并且类来自 Framework_B :) 然后您需要取消选中复选框并提供包含给定类的模块。谢谢你的问题。我正在将 Commons 框架用于其他框架,它帮助我实现了这一点;) 对于那些开发自定义 Cocoa Touch 框架的人来说,这可能会有所帮助。

    【讨论】:

      【解决方案5】:

      如果您尝试将类分配给 ViewController,请确保您创建的类继承了 UIViewController。 xCode 无法识别您的类的唯一原因是它是不同类型的实例,比方说,可能是 UITableViewController 类型。

      请先检查你的类的继承。

      【讨论】:

      • 复制className并粘贴到assign class字段中。如果它给出任何编译错误,则说明类不兼容,否则,可能是您的 xCode 的 IE 无法正常工作。
      【解决方案6】:

      我在测试的自定义 UIView 中遇到了这个问题,其中 UIView 在框架中。我创建了一个简单的应用程序,在 Storyboard 的默认 ViewController 中创建了一个 UIView,并将其类设置为 MyCustomView。应用程序启动时,我总是收到“界面生成器中的未知类”错误。我正在导入我的框架,并检查了框架存在的构建产品。

      问题是我的测试应用程序代码从未真正使用过该框架。即使故事板引用了它,我想它也从未加载过。当我在测试应用代码中添加[MyCustomView load]; 时,一切正常。

      【讨论】:

      • 这对我有用。我希望有一个更优雅的解决方案。
      【解决方案7】:

      对于那些遇到此问题但在情节提要中使用PKCanvasViewARView 等系统类的人。

      将视图的Custom Class 设置为任何这些系统类后,请确保将Module 设置为None。接下来转到Build Phases 中的目标Link Binary with Libraries 并手动链接包含该类的框架。最后一步是清理并删除派生数据(这很关键,否则问题不会消失)。

      【讨论】:

      • 老兄,你这个传奇!我花了很长时间来解决这个问题,我已经尝试了 30 多个不同的答案。你的工作
      【解决方案8】:

      好的,所以我不知道如何以及为什么,但是,我做了(再次)我之前已经尝试过的事情是:

      1. 删除类
      2. 使用新名称创建相同的类
      3. 删除了场景并在情节提要中重新创建了它
      4. 把它全部连接起来(以同样的方式!!!)

      现在看来 Xcode 知道我的班级.... 我仍然不知道是什么问题,但我想它与链接器有关。

      【讨论】:

      • 差不多 2 年后,这仍然是 Xcode 9.3 Beta 4 的问题。我所做的是从 IB 中删除自定义类名。确保制表符离开该字段。然后清理构建文件夹。然后手动删除所有缓存和派生数据文件夹。然后重新启动计算机。然后编译项目。确保它编译。然后在 IB 中重新添加新的类名。重置任何丢失的连接。它只是工作,创造一个短语。我的情况是我正在将 objc 类转换为 swift。是的,一切都正确连接。
      【解决方案9】:

      我遇到了这个错误,因为我在创建类文件时不小心将它保存到 Base.lproj 文件夹中。

      我通过右键单击项目导航器中的文件并删除对它的引用来修复错误。然后我通过 Finder 将文件移动到正确的文件夹。然后我右键单击 Project Navigator 中的主组并单击 Add Files to "GroupName"... 并选择类并单击 Add 按钮。

      之后错误就消失了。

      【讨论】:

        【解决方案10】:

        检查您的班级名称。确保它与您在属性检查器中分配 ViewController 的类相对应。

        【讨论】:

          【解决方案11】:

          您需要使用自定义类来实例化视图控制器。否则,您可能会遇到错误。

          self.storyboard!.instantiateViewController(withIdentifier: "namePage") as! EmailAndPassword
          

          【讨论】:

            【解决方案12】:

            这些都没有帮助。我的问题是我创建了自定义故事板并添加了自定义类。但是我忘记从自动生成的主故事板中获取初始视图控制器箭头,并将初始故事板更改为我的自定义故事板,它为我修复了它。

            【讨论】:

              【解决方案13】:

              我发现问题在于我指向的 UIViewController 没有附加到其“自定义类”参数的 ViewController.swift 文件!

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-11-30
                • 1970-01-01
                • 2012-03-31
                • 1970-01-01
                相关资源
                最近更新 更多