首页 文章

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

提问于
浏览
538

我升级到Xcode 6 beta 4,现在我的应用程序不断崩溃

Interface Builder文件中的未知类X.

它崩溃了,因为据说Xcode找不到我在Storyboard中链接的自定义类,但它显示它们在Xcode界面中正确链接 .

我很肯定一切都是正确的 . 我唯一的另一个选择可能是删除整个故事板文件并从头开始,因为它可能会以某种方式损坏 .

编辑:我还想补充一点,我尝试清理,重置模拟器,弄乱构建阶段等 . 这些都不起作用 .

30 回答

  • 2

    为我的 Custom Class 选择合适的 Module 我解决了这个问题 .

    这里是 :

    enter image description here

  • 1

    重命名swift类后我遇到了这个问题 . 使用@objc指令解决了这个问题:

    @objc(ForumTopicListViewController) class ForumTopicListViewController
    
  • 7

    就我而言,我在项目设置中为 Other Linker Flags 添加了一个标志 -ObjC 以使其正常工作 . 我也尝试使用 -all_load 标志,它也运行良好 .

    enter image description here

  • 2

    有时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">
    
  • 6

    实际上只对我有用的是将模块名称添加到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."

  • 2

    当我输入问题时,我解决了这个问题 . 我想我会回答我的问题,并将其留给其他可能在使用Xcode 6 beta 4时遇到此问题的人 .

    要解决此问题,您需要在Storyboard中选择每个自定义类对象(这包括任何自定义视图,甚至是自定义视图控制器本身) .

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

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

    请注意,如果在“模块”文本框内按Enter键不起作用,请尝试选择右侧的箭头并手动选择当前模块,然后清除文本框并按Enter键 . 您也可以尝试在类文本框中按Enter(尽管这通常是为了解决其他问题) .

    这是一张让事情更清晰的图片:
    enter image description here

  • 3

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

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

  • 93

    我的解决方案是从Custom类定义中删除@objc .

  • 15

    解决方案对我来说不同 . 您需要将类的.m添加到目标的构建阶段编译源 .

    希望这可以帮助!

  • 9

    我有同样的问题 .

    就我而言,Xcode没有将我的自定义类添加到:Target> Build Phase> Compile Sources .

    所以我建议你验证你的CustomClass.m是否存在 .

    enter image description here

    我希望这可以帮助你 .

  • 1

    Xcode Version 6.1(6A1052d)也遇到了同样的问题 . 我认为如果您重命名App / Xcode项目会出现问题 .

    我的解决方案是手动在界面构建器中添加模块名称 .

  • 9

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

  • 67

    我通过与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中错过了多少小时

  • 43

    当我将故事板从Swift项目移植到Objective-c项目时,我遇到了问题,注意到vvkuznetsov's answer,结果发现这两个项目使用相同的标识符 . 我"Product -> Clean"并点击模块和类文本字段中的Enter键 . 问题消失了 .

  • 52

    检查你的 class 是否正确 Target Membership .

  • 31

    @gfrs说的是正确的,你需要设置模块 . 但是我遇到了一个问题,我的 class 没有列在 Class 下拉列表中 . 最终我删除了swift文件,重新启动了Xcode并重新创建了该文件 . 最后列出了类,可以在Storyboard中使用 .

    还看看this answer,看起来像是解决了我遇到的'real'问题 .

  • 1319

    这对我有用..

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

    enter image description here

  • 9

    选择未知的类文件,打开文件检查器选项卡,在 Target Membership 中检查目标名称 . 你去吧

  • 26

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

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

  • 6

    添加新目标后我遇到了这个问题,然后使用“新建文件”对话框创建了一个新类,但是在创建对话框中意外无法检查新目标以及原始目标,因此该对象仅添加到我的原始目标 . 解决方案是删除源文件(仅删除引用),然后使用“添加文件”将其添加回来,这次检查两个目标 .

  • 13

    我的解决方案(Xcode 8.1 Swift 3.0):

    Interface Builder文件中的未知类 xxx .

    打开StoryBoard作为源代码并搜索 xxx . 删除包含值 xxx 的属性 . 构建并运行 .

  • 8

    我的回答:将自定义模块设置为等于自定义Pod名称(在我的示例中 - 自定义类名称),如附带的屏幕截图所示

    此解决方案适用于 specific case :来自 Pod (或 Carthage )框架的自定义 views 类 .

    基础设施:XCode8,Swift3

    enter image description here

  • 1

    我通过打开我的storyboard文件作为源代码并使用command-F搜索我的未知类并删除与之关联的自定义类来解决这个问题 .

  • 1

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

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

    Xcode 8.1只是崩溃了 . 简单而烦人地只是崩溃而且不打印任何东西 . 我正在追逐幻影崩溃一小时才发现这是同样的事情 - 在IB中未分配的课程 . 如果您遇到一些幻像崩溃,请首先仔细检查IB是否有未分配的类 .

  • 7

    我到处搜索谷歌 . 直到我遇到一个要求我将项目文件夹移动到桌面的人才,这些答案都不适合我 . 它只是自动工作 . 显然,如果您将项目文件夹深入到许多文件夹中,XCODE实际上会中断 .

  • 1

    Project with Multiple Targets

    在我的情况下,我正在处理具有多个目标的项目,并且问题是“从Target继承”未选中 . 选择“从目标继承”解决了我的问题

    enter image description here

  • 6

    这些步骤对我有用 .

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

  • 34

    我按照劳拉的建议修改了这个,但我不需要重新创建文件 .

    使用XCode 4,在Project Navigator中,选择包含它所抱怨的类的.m文件

    转到View-> Utilities-> Show File Inspector(这将显示右侧的File Inspector,带有.m文件信息)

    打开“目标成员资格”部分,确保为此.m文件选择了目标

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

  • 4

    我在 Xcode 8 遇到了这个问题,为了解决它我必须在文本编辑器中修改storyboard .

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

    给我一招 .

  • 13

    在我的例子中,Storyboard / xib中引用的 class 没有设置 Target Membership .

    要修复,请为该类的 .h.m 文件提供与其他类相同的目标成员资格 .

    No target membership set.

相关问题