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

我升级到Xcode 6testing版4,现在我的应用程序不断崩溃的消息

Interface Builder文件中未知的类X.

它崩溃,因为据说Xcode无法find我的故事板中链接的自定义类,但它显示它们在Xcode界面中正确链接。

我花了几个小时试图弄清楚,但没有任何工作! 我很积极,一切正确。 我唯一的select可能是删除整个故事板文件,并从头开始,因为它可能会损坏。

编辑:我也想补充说,我试图清洗,重置模拟器,搞乱build设阶段等没有任何工作。

我在input问题时解决了这个问题。 我想我会回答我的问题,并留在这里为任何人在使用Xcode 6 beta 4时可能面临此问题。

要解决此问题,您需要selectStoryboard中的每个自定义类对象(这包括任何自定义视图,甚至自定义视图控制器本身)。

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

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

请注意,如果在模块文本框内按下input不起作用,请尝试select右侧的箭头并手动select当前模块,然后清除文本框,然后按回车。 您也可以尝试在类文本框内按下Enter键(虽然这通常是为了解决不同的问题)。

这是一个让事情更加清晰的形象: 在这里输入图像描述

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

要修复它,打开故事板作为源代码并replace此行:

 <viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" sceneMemberID="viewController"> 

对此:

 <viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" customModule="AppName" customModuleProvider="target" sceneMemberID="viewController"> 

重命名一个Swift类后,我遇到了这个问题。 通过使用@objc指令解决它:

 @objc(ForumTopicListViewController) class ForumTopicListViewController 

这对我有用..

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

在这里输入图像描述

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

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

Xcode 8.1只是崩溃。 简单而烦人的只是崩溃,不打印任何东西。 我正在追赶那个幻影,一小时才发现这是同样的事情 – 在IB的未分配类。 如果碰到幻灯片崩溃,请首先仔细检查IB未分配的类。

有时您提供的控制器会丢失当前应用程序的目标成员资格。 在这种情况下,按下“模块”字段上的input将不会执行任何操作。 去控制器,并确保它有目标成员设置为当前的应用程序。

我的答案:设置自定义模块等于自定义Pod名称(在我的例子 – 自定义类名称)就像附加的截图

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

基础设施:XCode8,Swift3

在这里输入图像描述

我修正了恰恰相反ChikabuZbuild议(感谢指出,虽然)。 在故事板文件中,find这个:

 <viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" customModule="AppName" customModuleProvider="target" sceneMemberID="viewController"> 

并用此replace它:

 <viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" sceneMemberID="viewController"> 

我无法相信在丢失Swift编译器和Xcode 6中有多less个小时的错误

我在Xcode 8中遇到了这个问题,为了解决这个问题,我不得不在文本编辑器中修改故事板。

通常,查找您的控件并从控件实体中移除customModulecustomModuleProvider

对我有一个把戏。

当我从项目中删除Main.storyboardLaunchScreen.xib文件和默认的ViewController类时,我在Xcode 6.1中遇到了这个问题。

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

我到处search这个。 直到遇到一位要我将我的项目文件夹移动到桌面的老兄,这些答案都不起作用。 它只是自动工作。 显然,如果你有你的项目文件夹到很多文件夹深,XCODE实际上打破。

我有同样的问题。

在我的情况下,Xcode没有添加我的自定义类到:目标>build设阶段>编译源。

所以我build议你validation你的CustomClass.m是否在那里。

在这里输入图像描述

我希望这可以帮助你。

检查你的class级是否有正确的目标会员

这些步骤对我有用。

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

我通过打开我的故事板文件作为源代码并使用命令F来search我未知的类并删除与它关联的自定义类来解决此问题。

@gfrs说的是正确的,你需要设置模块。 不过,我曾遇到一个问题,我的class级没有列在Class下拉列表中。 最后我删除了swift文件,重新启动Xcode并重新创build文件。 最后,这个class上市,可以用于故事板。

也看看这个答案 ,看起来像解决了我遇到的“真正的”问题。

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

您可能还需要指明目标提供者。 为了实现这个目标,你可以在源代码模式下打开故事板,并在ViewController和View尖括号中添加“customModuleProvider”属性。

在我的情况下,Storyboard / xib中引用的没有设置目标成员

要解决这个问题,请将该课程的.h.m文件与其他课程相同的目标成员资格。

没有设定目标会员

我的解决scheme(Xcode 8.1 Swift 3.0):

Interface Builder文件中未知的类xxx

打开StoryBoard作为源代码并searchxxx 。 删除包含值xxx的属性。 build立和运行。

当我将Swift项目的Storyboard移植到Objective-c项目时,遇到了这个问题,注意到vvkuznetsov的回答 ,结果发现两个项目使用相同的标识符。 我“产品 – >清洁”,然后点击模块和类文本字段上的Enter键。 这个问题就消失了。

我的解决scheme是从自定义类定义中删除@objc。

我按照劳拉build议的方式解决了这个问题,但是我不需要重新创build这些文件。

使用XCode 4,在Project Navigator中,select包含正在抱怨的类的.m文件

转到查看 – >实用程序 – >显示文件检查器(这将显示文件检查器的权利,与.m文件的信息)

打开“目标成员”部分,确保为该.m文件select了目标

当我将我的.m文件添加到我的项目中时,由于某种原因它没有将其添加到我的默认目标中,导致我得到您提到的错误。

为我的Custom Classselect适当的Module我解决了这个问题。

这里是 :

在这里输入图像描述

什么只为我工作实际上是将模块名称添加到xib文件…

所以,xib文件看起来像这样:

 mymodule.MyViewController.xib (Module being the name of the proyect, usually) 

在我看来,这是个可怕的解决scheme,但据推测,苹果希望我们现在就这样做。

这个问题显示了3个可能的Beta 4版本的工作 …显然苹果在这种情况下并不是非常有用,因为他们称之为“按预期工作”。

我有与Xcode版本6.1(6A1052d)相同的问题。 我认为如果你重命名你的App / Xcode项目,就会出现这个问题。

我的解决scheme是手动添加模块名称在界面生成器中。

我添加了一个新的目标后,遇到了这个问题,然后使用“新build文件”对话框创build了一个新类,但是无意中无法检查新目标以及创build对话框中的原始目标,因此该对象只能添加到我的原来的目标。 解决scheme是删除源文件(仅删除参考),然后使用“添加文件”添加它们,这次检查两个目标。

我的解决scheme是不同的。 您需要将该类的.m添加到目标的构build阶段编译源。

希望这可以帮助!

select您未知的类文件,打开文件检查器选项卡,检查Target Membership目标名称。 你走了

在我的情况下,我在项目设置中添加了一个标志-ObjCOther Linker Flags ,使其工作。 另外我尝试使用-all_load标志,它也运行得很好。

在这里输入图像描述

当我从我的新的基于视图的项目中删除了已经包含的ViewController.h&ViewController.m文件,并从故事板中删除了与这个类有关的场景时,Xcode 6遇到了这样的问题,Xcode将这些文件转储到派生的数据文件夹中,所以如果你尝试去窗口 – >项目 – > your_project并删除派生的数据一切都会好起来的。