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中遇到了这个问题,为了解决这个问题,我不得不在文本编辑器中修改故事板。
通常,查找您的控件并从控件实体中移除customModule
和customModuleProvider
。
对我有一个把戏。
当我从项目中删除Main.storyboard
, LaunchScreen.xib
文件和默认的ViewController
类时,我在Xcode 6.1中遇到了这个问题。
我通过从Info.plist
删除Launch Screen File
和Main 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 Class
select适当的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
目标名称。 你走了
在我的情况下,我在项目设置中添加了一个标志-ObjC
到Other Linker Flags
,使其工作。 另外我尝试使用-all_load
标志,它也运行得很好。
当我从我的新的基于视图的项目中删除了已经包含的ViewController.h&ViewController.m文件,并从故事板中删除了与这个类有关的场景时,Xcode 6遇到了这样的问题,Xcode将这些文件转储到派生的数据文件夹中,所以如果你尝试去窗口 – >项目 – > your_project并删除派生的数据一切都会好起来的。