Xcode 6 Bug:Interface Builder文件中的未知类

Epi*_*yte 584 xcode interface-builder ios uistoryboard xcode6

我升级到Xcode 6 beta 4,现在我的应用程序不断崩溃

Interface Builder文件中的未知类X.

它崩溃了,因为据说Xcode找不到我在Storyboard中链接的自定义类,但它显示它们在Xcode界面中正确链接.

我很肯定一切都是正确的.我唯一的另一个选择可能是删除整个故事板文件并从头开始,因为它可能会以某种方式损坏.

编辑:我还想补充一点,我尝试清理,重置模拟器,弄乱构建阶段等.这些都不起作用.

Epi*_*yte 1427

当我输入问题时,我解决了这个问题.我想我会回答我的问题,并将其留给其他可能在使用Xcode 6 beta 4时遇到此问题的人.

要解决此问题,您需要在Storyboard中选择每个自定义类对象(这包括任何自定义视图,甚至是自定义视图控制器本身).

然后选择这些对象,打开身份检查器,在"自定义类"下,您应该看到"模块"选项.在"模块"文本框内单击,然后按Enter键.

而已!我的所有自定义对象的当前模块必须在Xcode 6 beta 4中以某种方式在内部错误设置.但是在检查器中没有这种可视指示.

请注意,如果在"模块"文本框内按Enter键不起作用,请尝试选择右侧的箭头并手动选择当前模块,然后清除文本框并按Enter键.您也可以尝试在类文本框中按Enter键(尽管这通常是为了解决另一个问题).

这是一个让事情变得更清晰的图像: 在此输入图像描述

  • 对我来说,单击"模块"内部并按Enter键不能始终如一地工作,但选择"类"字段(并按下回车键)始终可以完成工作. (68认同)
  • 此问题仍存在于XCode 7.2中.该解决方案有效. (12认同)
  • 哇.谢谢你,我不认为我会去那儿.这修复了一个问题,在我将`@objc(...)`添加到我的一个Swift类之后开始发生. (8认同)
  • 这仍然是Xcode 8.3.1中的一个问题......真是太遗憾了 (3认同)
  • 对我来说,目标设置正确,但班级仍未出现在IB中.但是,我注意到文件的"位置"显示了"相对于项目"而不是"相对于组"的路径.删除文件引用和组并在项目根目录中重新添加它对我有用. (2认同)
  • 适用于XCode 7.1.1 (2认同)
  • Xcode版本9.0 beta 6,问题没有解决 (2认同)
  • 哇这是在2014年回答,我仍然发现它发生在2018年6月 (2认同)

Chi*_*buZ 98

有时Xcode错过了 customModule="AppName" customModuleProvider="target"

要修复它,请打开storyboard作为源代码并替换此行:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">
Run Code Online (Sandbox Code Playgroud)

对此:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
 customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">
Run Code Online (Sandbox Code Playgroud)

  • 实际上在我的情况下,我不得不删除`customModuleProvider`,然后错误就消失了. (7认同)
  • 还在发生......这样的事情让我想哭:( (7认同)
  • Guillermo,截至3月底仍在Xcode中发生! (3认同)
  • @MaciejSwic删除`customModuleProvider`也为我做了,谢谢! (3认同)

小智 71

重命名swift类后我遇到了这个问题.使用@objc指令解决了这个问题:

@objc(ForumTopicListViewController) class ForumTopicListViewController
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说是固定的,我有`@objc class X`并改为`@objc(X)class X`. (4认同)

Muh*_*yab 58

具有多个目标的项目

在我的情况下,我正在处理具有多个目标的项目,并且问题是"从Target继承"未被检查.选择"从目标继承"解决了我的问题

在此输入图像描述


mav*_*cks 57

这对我有用..

检查你的编译源代码,是否添加了该文件(例如; ViewController.m),在我的情况下没有添加ViewController文件,所以它给了我错误..

在此输入图像描述


jov*_*vic 46

这可能发生在6.0以上的任何Xcode中.在Swift项目中重命名一些ViewController类之后,它发生在我身上(但我想它也会发生在Obj-C上).您只需打开界面构建器,转到重命名了其类的ViewController的Identity Inspector,选择class并按Enter键.这会将重命名的类重新分配给选定的ViewController,并重置模块值,该值在重命名类后会丢失.

更新Xcode 8.1(也可能是8.0):

Xcode 8.1只是崩溃了.简单而烦人地只是崩溃而且不打印任何东西.我正在追逐那个幻影崩溃一小时才发现这是同样的事情 - 在IB中未分配的课程.如果您遇到一些幻像崩溃,请首先仔细检查IB是否有未分配的类.


小智 32

有时您提供的控制器会从当前应用程序中丢失其目标成员资格.在这种情况下,按"模块"字段中的回车将不执行任何操作.转到控制器并确保它具有设置为当前应用程序的目标成员资格.


Tam*_*ara 29

我的回答:将自定义模块设置为等于自定义Pod名称(在我的示例中 - 自定义类名称),如附带的屏幕截图所示

此解决方案适用于特定情况:适用于Pod(或Carthage)框架中的自定义视图类.

基础设施:XCode8,Swift3

在此输入图像描述


Arn*_*nab 19

启用使用Inherit Module From Target了正确的目标模块。那解决了问题。

在此处输入图片说明


Orl*_*iev 17

我通过与ChikabuZ建议完全相反的方式修复它(感谢指出它).在storyboard文件中,找到:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">
Run Code Online (Sandbox Code Playgroud)

并将其替换为:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" sceneMemberID="viewController">
Run Code Online (Sandbox Code Playgroud)

我无法相信我在Swift编译器和Xcode 6中错过了几个小时


roy*_*roy 17

选择适合Module我的Custom Class我解决了这个问题.

这里是 :

在此输入图像描述


Geo*_*dze 13

我在Xcode 8中遇到了这个问题,要解决它我必须在文本编辑器中修改storyboard.

通常,查找您的控件customModulecustomModuleProvider从控件实体中删除.

给我一招.


Vin*_*ain 9

我在Xcode 6.1面对这个问题时,我删除Main.storyboardLaunchScreen.xib文件,默认ViewController从我的项目中的类.

我通过删除Launch Screen FileMain Interface条目来修复它Info.plist


rcm*_*ark 9

我有同样的问题.

就我而言,Xcode没有将我的自定义类添加到:Target> Build Phase> Compile Sources.

因此,我建议您验证您的CustomClass.m是否存在.

在此输入图像描述

我希望这可以帮助你.


Jak*_*lář 9

检查您的类有正确的目标会员.


Mik*_*iel 9

您需要选中“从目标继承模块”复选框

在此处输入图片说明


VBa*_*thi 8

我为此搜索到处都是谷歌.直到我遇到一位要求我将项目文件夹移动到桌面的人才,这些答案都不适合我.它只是自动工作.显然,如果您将项目文件夹放在很多文件夹中,XCODE实际上会中断.


小智 7

这些步骤对我有用.

1)清除派生数据.
2)删除.h和.m文件
3)再次创建.h和.m文件


Wra*_*ker 7

我通过打开我的storyboard文件作为源代码并使用command-F搜索我的未知类并删除与其关联的自定义类来解决这个问题.


Bou*_*uke 6

@gfrs所说的是正确的,你需要设置模块.但是我曾经遇到过一个问题,我的班级没有列在Class下拉列表中.最后我删除了swift文件,重新启动了Xcode并重新创建了该文件.最后列出了类,可以在Storyboard中使用.

还看看这个答案,看起来像是解决了我遇到的'真实'问题.


Ten*_*ong 6

我通过在所有View控制器和视图的身份检查器的自定义类中键入模块名称(不幸的是,下拉列表将不显示任何内容......)来解决此问题.

您可能还需要指明目标提供商.要实现此目标,您可以在源代码模式下打开故事板,并在ViewController和View尖括号中添加"customModuleProvider"属性.


ibr*_*maz 6

我的解决方案(Xcode 8.1 Swift 3.0):

Interface Builder文件中的未知类xxx.

打开StoryBoard作为源代码并搜索xxx.删除包含值xxx的属性.构建并运行.