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