我已升级到Xcode 6 beta 4,现在我的应用程序不断崩溃,并显示以下消息:
Interface Builder文件中的未知类X。
它崩溃是因为据称Xcode找不到我在Storyboard中链接的自定义类,但是它表明它们在Xcode界面中已正确链接。
我很肯定所有内容都正确链接。我唯一的其他选择可能是删除整个故事板文件,并从头开始,因为它可能以某种方式损坏。
编辑:我还想补充一点,我尝试清理,重置模拟器,弄乱构建阶段等。这些都不起作用。
我已升级到Xcode 6 beta 4,现在我的应用程序不断崩溃,并显示以下消息:
Interface Builder文件中的未知类X。
它崩溃是因为据称Xcode找不到我在Storyboard中链接的自定义类,但是它表明它们在Xcode界面中已正确链接。
我很肯定所有内容都正确链接。我唯一的其他选择可能是删除整个故事板文件,并从头开始,因为它可能以某种方式损坏。
编辑:我还想补充一点,我尝试清理,重置模拟器,弄乱构建阶段等。这些都不起作用。
Answers:
我在输入问题时解决了这个问题。我想我会回答我的问题,并留给其他任何在使用Xcode 6 beta 4时可能遇到此问题的人使用。
若要解决此问题,您需要在Storyboard中选择每个自定义类对象(这包括任何自定义视图,甚至包括自定义视图控制器本身)。
然后,选择那些对象,打开身份检查器,然后在“自定义类”下看到“模块”选项。在“模块”文本框内单击,然后按Enter。
而已!我所有自定义对象的当前模块必须在Xcode 6 beta 4中在内部进行了不正确的设置,但是在检查器中没有直观的指示。
请注意,如果在“模块”文本框内按Enter键无效,请尝试选择右侧的箭头并手动选择当前模块,然后清除文本框并按Enter键。您也可以尝试在课程文本框内按Enter键(尽管这通常是为了解决其他问题)。
这是使情况更清晰的图像:
@objc(...)
到我的Swift类之一后开始发生的问题。
有时Xcode错过了 customModule="AppName" customModuleProvider="target"
要修复此问题,请打开情节提要作为源代码并替换以下行:
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">
对此:
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">
customModuleProvider
,然后错误消失了。
customModuleProvider
也为我删除了它,谢谢!
重命名快速班后,我遇到了这个问题。通过使用@objc指令解决了它:
@objc(ForumTopicListViewController) class ForumTopicListViewController
@objc class X
开始@objc(X) class X
工作了。
@objc()
“原始” ViewController类不需要该指令……
这对我有用。
检查您的编译源代码,是否添加了该文件(例如ViewController.m),在我的情况下未添加ViewController文件,因此出现了错误。
Compile Sources
。对于某些人来说,这确实是正确的解决方案。
在6.0以上的任何Xcode中都可能发生这种情况。在Swift项目中重命名了一些ViewController类之后,这件事发生了(但是我想它也会在Obj-C中发生)。您只需要打开接口构建器,转到已将其类重命名的ViewController的Identity Inspector,选择类并按Enter。这会将重命名的类重新分配给选定的ViewController,还重置重命名该类后丢失的模块值。
Xcode 8.1的更新(可能也是8.0):
Xcode 8.1崩溃了。简单而烦人的只是崩溃,什么都不打印。我追赶那个幻影崩溃了一个小时,只是发现那是同一件事-IB中未分配的类。如果遇到幻像崩溃,请首先仔细检查IB是否有未分配的类。
有时,您提供的控制器将从当前应用程序中失去其目标成员资格。在这种情况下,在“模块”(Module)字段上按Enter键将无效。转到控制器,并确保已将目标成员资格设置为当前应用程序。
我通过与ChikabuZ建议的相反的方式解决了问题(尽管感谢指出)。在情节提要文件中,找到以下内容:
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">
并替换为:
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass" sceneMemberID="viewController">
我不敢相信我会失去几个小时来解决Swift编译器和Xcode 6中的错误
我在Xcode 6.1面对这个问题时,我删除Main.storyboard
的LaunchScreen.xib
文件,默认ViewController
从我的项目中的类。
我通过删除Launch Screen File
和中的Main Interface
条目来修复它Info.plist
我为此到处搜索。在遇到1个要求我将项目文件夹移动到桌面的家伙之前,所有答案都对我不起作用。它只是自动工作。显然,如果您将文件夹投影到许多文件夹中,则XCODE实际上会中断。
这些步骤对我有用。
1)清除衍生数据。
2)删除.h和.m文件
3)再次创建.h和.m文件
@gfrs说的是正确的,您需要设置模块。但是我曾经遇到一个问题,我的班级没有在Class
下拉列表中列出。最终,我删除了swift文件,重新启动了Xcode并重新创建了该文件。最终列出了该类,可以在Storyboard中使用。
也可以看看这个答案,它看起来像是解决了我遇到的“实际”问题。
我的解决方案(Xcode 8.1 Swift 3.0):
Interface Builder文件中的未知类xxx。
打开StoryBoard作为源代码,然后搜索xxx。删除包含值xxx的属性。生成并运行。
customModule="" customModuleProvider=""
就我而言,情节提要/ xib中引用的类没有目标会员资格设置。
要解决此问题,请为该课程的类别.h
和.m
文件提供与其他课程相同的目标会员资格。
当我将情节提要从Swift项目移植到Objective-c项目时,我遇到了问题,注意到vvkuznetsov的答案,结果是两个项目使用相同的标识符。在“产品->清洁”中,点击“模块和类别”文本字段上的Enter键。问题解决了。
我按照劳拉的建议修复了此问题,但不需要重新创建文件。
使用XCode 4,在Project Navigator中,选择包含抱怨的类的.m文件。
转到查看->实用工具->显示文件检查器(这将在右侧显示文件检查器,并带有.m文件信息)
打开“目标成员身份”部分,并确保为此.m文件选择了目标
当我将.m文件添加到项目中时,由于某种原因它没有将其添加到默认目标中,这导致我得到您提到的错误。
实际上对我唯一起作用的是将模块名称添加到xib文件中...
如此,xib文件如下所示:
mymodule.MyViewController.xib (Module being the name of the proyect, usually)
我认为这是一个可怕的解决方案,但据说这就是苹果希望我们现在这样做的方式。
这个问题显示了Beta 4中有3种可能的解决方法 ……据某些人称,在这种情况下,Apple并不是很有帮助,因为他们称其为“按预期工作”。