我升级到Xcode 6 beta 4,现在我的应用程序不断崩溃
Interface Builder文件中的未知类X.
它崩溃了,因为据说Xcode找不到我在Storyboard中链接的自定义类,但它显示它们在Xcode界面中正确链接。
我很肯定一切都是正确的。我唯一的另一个选择可能是删除整个故事板文件并从头开始,因为它可能会以某种方式损坏。
编辑:我还想补充一点,我尝试清理,重置模拟器,搞乱构建阶段等。这些都不起作用。
当我输入问题时,我解决了这个问题。我想我会回答我的问题,并将其留给其他可能在使用Xcode 6 beta 4时遇到此问题的人。
要解决此问题,您需要在Storyboard中选择每个自定义类对象(这包括任何自定义视图,甚至是自定义视图控制器本身)。
然后选择这些对象,打开身份检查器,在“自定义类”下,您应该看到“模块”选项。在“模块”文本框内单击,然后按Enter键。
而已!我的所有自定义对象的当前模块必须在Xcode 6 beta 4中以某种方式在内部错误设置。但是在检查器中没有这种可视指示。
请注意,如果在“模块”文本框内按Enter键不起作用,请尝试选择右侧的箭头并手动选择当前模块,然后清除文本框并按Enter键。您也可以尝试在类文本框中按Enter键(尽管这通常是为了解决另一个问题)。
这是一个让事情变得更清晰的图像:
我通过与ChikabuZ建议完全相反的方式修复它(感谢指出它)。在storyboard文件中,找到:
<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 8中遇到了这个问题,要解决它我必须在文本编辑器中修改storyboard。
通常,查找您的控件并从控件实体中删除customModule
和customModuleProvider
。
给我一招。
当我从我的项目中删除Main.storyboard
,LaunchScreen.xib
文件和默认的ViewController
类时,我在Xcode 6.1中遇到了这个问题。
我通过删除Launch Screen File
中的Main Interface
和Info.plist
条目来修复它
检查您的班级是否有正确的目标会员资格
我为此搜索到处都是谷歌。直到我遇到一位要求我将项目文件夹移动到桌面的人才,这些答案都不适合我。它只是自动工作。显然,如果您将项目文件夹放在很多文件夹中,XCODE实际上会中断。
这些步骤对我有用。
1)清除派生数据。 2)删除.h和.m文件 3)再次创建.h和.m文件
我通过打开我的storyboard文件作为源代码并使用command-F搜索我的未知类并删除与之关联的自定义类来解决这个问题。
@gfrs说的是正确的,你需要设置模块。但是我曾经遇到过一个问题,即我的班级没有在Class
下拉列表中列出。最后我删除了swift文件,重新启动了Xcode并重新创建了该文件。最后列出了类,可以在Storyboard中使用。
还看看this answer,它看起来像是解决了我遇到的“真实”问题。
有时Xcode错过了customModule="AppName" customModuleProvider="target"
要修复它,请打开storyboard作为源代码并替换此行:
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">
对此:
<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">
我通过在所有View控制器和视图的身份检查器的自定义类中键入模块名称(不幸的是,下拉列表将不显示任何内容......)来解决此问题。
您可能还需要指明目标提供商。要实现此目标,您可以在源代码模式下打开故事板,并在ViewController和View尖括号中添加“customModuleProvider”属性。
我的解决方案(Xcode 8.1 Swift 3.0):
Interface Builder文件中的未知类xxx。
打开StoryBoard作为源代码并搜索xxx。删除包含值xxx的属性。构建并运行。
在我的例子中,Storyboard / xib中引用的类没有设置Target Membership。
要修复,请为该类的.h
和.m
文件提供与其他类相同的目标成员资格。
当我将故事板从Swift项目移植到Objective-c项目时,我遇到了问题,注意到vvkuznetsov's answer,结果发现这两个项目使用相同的标识符。 I“Product - > Clean”,然后点击Module and Class文本字段中的Enter键。问题消失了。
我的解决方案是从Custom类定义中删除@objc。
我按照Laura建议的方式解决了这个问题,但我不需要重新创建文件。
使用XCode 4,在Project Navigator中,选择包含它所抱怨的类的.m文件
转到View-> Utilities-> Show File Inspector(这将显示右侧的File Inspector,带有.m文件信息)
打开“目标成员资格”部分,确保为此.m文件选择了目标
当我将.m文件添加到我的项目时,由于某种原因它没有将它添加到我的默认目标,这导致我得到你提到的错误。
实际上只对我有用的是将模块名称添加到xib文件中......
Sooo,xib文件如下所示:
mymodule.MyViewController.xib (Module being the name of the proyect, usually)
在我看来,这是一个可怕的解决方案,但这应该是Apple希望我们现在这样做的方式。
This question shows 3 possible work arounds back in beta 4 ......显然苹果公司在这种情况下并不是很有帮助,因为他们称之为“按预期工作”。
我对Xcode Version 6.1(6A1052d)也有同样的问题。我认为如果您重命名App / Xcode项目会出现问题。
我的解决方案是手动在界面构建器中添加模块名称。
添加新目标后我遇到了这个问题,然后使用“新建文件”对话框创建了一个新类,但是在创建对话框中意外无法检查新目标以及原始目标,因此该对象仅添加到我的原始目标。解决方案是删除源文件(仅删除引用),然后使用“添加文件”将其添加回来,这次检查两个目标。
重命名swift类后我遇到了这个问题。使用@objc指令解决了这个问题:
@objc(ForumTopicListViewController) class ForumTopicListViewController
解决方案对我来说不同。您需要将类的.m添加到目标的构建阶段编译源。
希望这可以帮助!
这对我有用..
检查你的编译源代码,是否添加了该文件(例如; ViewController.m),在我的情况下没有添加ViewController文件,所以它给了我错误..
这可能发生在6.0以上的任何Xcode中。在Swift项目中重命名一些ViewController类之后,它发生在我身上(但我想它也会发生在Obj-C上)。您只需打开界面构建器,转到重命名了其类的ViewController的Identity Inspector,选择class并按Enter键。这会将重命名的类重新分配给选定的ViewController,并重置模块值,该值在重命名类后会丢失。
更新Xcode 8.1(也可能是8.0):
Xcode 8.1只是崩溃了。简单而烦人地只是崩溃而且不打印任何东西。我正在追逐那个幻影崩溃一小时才发现这是同样的事情 - 在IB中未分配的课程。如果您遇到一些幻像崩溃,请首先仔细检查IB是否有未分配的类。
有时您提供的控制器会从当前应用程序中丢失其目标成员资格。在这种情况下,按“模块”字段中的回车将不执行任何操作。转到控制器并确保它具有设置为当前应用程序的目标成员资格。