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

uharum 发布于 2019-05-27 ios 最后更新 2019-05-27 07:30 106 浏览

我升级到Xcode 6测试版4,现在我的应用程序不断崩溃的消息

Unknown class X in Interface Builder file.
它崩溃是因为据说Xcode无法找到我在Storyboard中链接的自定义类,但它显示它们在Xcode界面中正确链接。 我花了数小时试图弄清楚这一点,但没有任何工作!我很积极,一切都正确连接。我唯一的其他选择可能是删除整个故事板文件并从头开始,因为它可能以某种方式损坏。 编辑:我也想补充一点,我尝试清理,重新设置模拟器,搞乱构建阶段等。没有任何工作。
已邀请:

xnam

赞同来自:

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

zomnis

赞同来自:

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

gomnis

赞同来自:

我有同样的问题,但不是同一个修复。 项目文件夹有点破坏,所以我不得不将我的项目文件夹复制到另一个文件夹,例如你的桌面,然后打开项目。 当它打开时转到你的界面构建器项目,你会看到他识别你的脚本,然后你确实点击你的脚本名称并按回车键,你会看到模块输入将填写它自己。 它会像魅力一样工作! :d

zipsum

赞同来自:

在mij的情况下,ViewController.h / m在lib中。项目仍在构建,但自Xcode 6.3以来,上述错误在运行时显示。将两个文件移回项目解决了这个问题。

cea

赞同来自:

解决方案对我来说不同。您需要将类的.m添加到目标的构建阶段编译源。 希望这可以帮助!

id_cum

赞同来自:

当我从项目中删除Main.storyboardLaunchScreen.xib文件和默认的ViewController类时,我在Xcode 6.1中遇到了这个问题。 我通过删除Info.plist中的Launch Screen FileMain Interface条目来修复它

vdicta

赞同来自:

我的问题与podfile框架有关(特别是'BWWalkthrough')。上述解决方案都不适用于我,无论我怎么做,我都无法让模块指向我的应用程序。 最终为我工作的是将库作为podfile删除,并将其作为静态库直接添加到我的项目中。在那之后,对我来说,一切都是笨拙的。不完全确定该类的pod实现有什么“破坏”。

qodio

赞同来自:

我有同样的问题。 就我而言,Xcode没有将我的自定义类添加到:Target> Build Phase> Compile Sources。 所以我建议你验证你的CustomClass.m是否存在。 enter image description here 我希望这可以帮助你。

homnis

赞同来自:

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

vvelit

赞同来自:

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

@objc(ForumTopicListViewController) class ForumTopicListViewController

nomnis

赞同来自:

当我输入问题时,我解决了这个问题。我想我会回答我的问题,并将其留给其他可能在使用Xcode 6 beta 4时遇到此问题的人。 要解决此问题,您需要在Storyboard中选择每个自定义类对象(这包括任何自定义视图,甚至是自定义视图控制器本身)。 然后选择这些对象,打开身份检查器,在“自定义类”下,您应该看到“模块”选项。在“模块”文本框内单击,然后按Enter键。 而已!我的所有自定义对象的当前模块必须在Xcode 6 beta 4中以某种方式在内部错误地设置。但是在检查器中没有这种可视指示。 请注意,如果在“模块”文本框内按Enter键不起作用,请尝试选择右侧的箭头并手动选择当前模块,然后清除文本框并按Enter键。您也可以尝试在类文本框中按Enter(尽管这通常是为了解决不同的问题)。 这是一个让事情更清晰的图像:

enter image description here

in_id

赞同来自:

我按照Laura建议的方式解决了这个问题,但我不需要重新创建文件。 使用XCode 4,在Project Navigator中,选择包含它所抱怨的类的.m文件 转到视图 - >实用程序 - >显示文件检查器 (这将显示右侧的文件检查器,带有.m文件信息) 打开“目标成员资格”部分,确保为此.m文件选择了目标 当我将.m文件添加到我的项目时,由于某种原因它没有将它添加到我的默认目标,这导致我得到你提到的错误。

xest

赞同来自:

我正在玩Spring课程。这个错误发生在我身上,因为我在将整个文件夹类移动到项目而不是创建组时使用了文件夹作为参考。所以这是我的解决方案,不要使用文件夹作为参考,但创建组。

wnihil

赞同来自:

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

gvel

赞同来自:

在我的情况下,问题是由于我们的主故事板设置为启动屏幕,并且我在应用程序启动时为故事板中引用的每个自定义视图控制器收到控制台错误(没有崩溃)。 我们已经从XIB覆盖并将图像发布到故事板上,我还没有开始使用再次启动屏幕。当我最终创建一个没有自定义视图控制器(不允许)的裸骨启动故事板时,这些控制台错误停止显示。

jneque

赞同来自:

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

hculpa

赞同来自:

当我删除已包含的ViewController.h&时,我在Xcode 6上遇到了这样的问题。来自我的新视图项目的ViewController.m文件,并从storyboard中删除了与该类相关的场景,Xcode将这些文件兑现在派生数据文件夹中,因此如果您尝试转到Window - > Projects - > your_project并删除派生数据一切都会好起来的。

aet

赞同来自:

实际上只对我有用的是将模块名称添加到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 ......显然苹果公司在这种情况下并不是很有帮助,因为他们称之为“按预期工作”。

rvero

赞同来自:

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

nsequi

赞同来自:

对我来说问题是我在故事板中引用了一个自定义类(与.h文件匹配),但我在.m文件中没有@implementation命令。

ad_est

赞同来自:

当我向“myapp”添加文件时,我遇到了与Xcode 6.3相同的问题。 那是因为我选择“创建文件夹引用”而不是“创建组”。我删除这些文件并使用“创建组”选项再次添加它们。问题已修复。

lest

赞同来自:

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

enter image description here

rut

赞同来自:

我的解决方案(Xcode 8.1 Swift 3.0): Interface Builder文件中的未知类xxx。 打开StoryBoard作为源代码并搜索xxx。删除包含值xxx的属性。构建并运行。

baut

赞同来自:

我在Xcode 8中遇到了这个问题,要解决它我必须在文本编辑器中修改storyboard。 通常,请查找您的控件并从控件实体中删除customModulecustomModuleProvider。 给我一招。

bmagni

赞同来自:

不要在项目名称中使用空格,否则自定义类将找不到您自己的类。

xsit

赞同来自:

在我的情况下,我将应用程序设置为通用应用程序,因此xcode创建了两个故事板。但我只使用(设计)了iPhone故事板。并试图在iPad上运行应用程序。解决问题只需要使应用程序只为iPhone和工作得很好。

gcum

赞同来自:

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

pquis

赞同来自:

我的回答:将自定义模块设置为等于自定义Pod名称(在我的示例中 - 自定义类名称),如附带的屏幕截图所示 此解决方案适用于特定情况:适用于Pod(或Carthage)框架中的自定义视图类。 基础设施:XCode8,Swift3 enter image description here

qquasi

赞同来自:

当我创建一个与我的项目目录中已经存在的名称相同的项目时,我遇到了一个问题(尽管它已经被删除了一段时间)。我在那里写了我的解决方案https://stackoverflow.com/a/27763697/1654692

mid

赞同来自:

@gfrs说的是正确的,你需要设置模块。但是我曾遇到一个问题,我的课程没有在Class下拉列表中列出。最终我删除了swift文件,重新启动了Xcode并重新创建了该文件。最后列出了类,可以在Storyboard中使用。 还可以看看this answer,它看起来像是解决了我遇到的“真正”问题。

weos

赞同来自:

Xcode Version 6.1(6A1052d)也遇到了同样的问题。我认为如果您重命名App / Xcode项目会出现问题。 我的解决方案是手动在界面构建器中添加模块名称。

csequi

赞同来自:

它发生在我身上,因为我的班级标有@objc,而在sotryboard中找不到该模块。删除@objc解决了问题

eearum

赞同来自:

当我将故事板从Swift项目移植到Objective-c项目时,我遇到了问题,注意到vvkuznetsov's answer,结果发现这两个项目使用相同的标识符。 I“Product - > Clean”,然后点击Module and Class文本字段中的Enter键。问题消失了。

sit_et

赞同来自:

这些步骤对我有用。 1)清除派生数据。
2)删除.h和.m文件
3)再次创建.h和.m文件

oest

赞同来自:

对我来说,我正在使用Xcode7 + Swift2 通过检查我的代码解决了这个问题,我在viewController中有这一行:

 self?.navigationController?.pushViewController(vc, animated: true)
然后我意识到我还没有将navigationController连接到详细信息页面。因此,如果您正在推送具有自定义ID的新ViewController,那么最好检查一下。

est_et

赞同来自:

在我的例子中,Storyboard / xib中引用的类没有设置Target Membership。 要修复此问题,请为该类的.h.m文件提供与其他类相同的目标成员资格。

No target membership set.

id_cum

赞同来自:

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

snihil

赞同来自:

Swift 3解决方案。 所有这些都不起作用。

  1. 点击右侧窗格中的Module无效。
  2. 添加@obj无效。
  3. 重新启动无效。
  4. 移动到桌面,因为xcode中断较长的路径不起作用。 ...
这终于奏效了。 只需创建新目录并在其中创建一个新项目。添加Main.sotryboard以外的文件。 现在从先前项目中复制视图控制器并将其粘贴到新的Main.storyboard中。 瞧!这很有效。

riure

赞同来自:

检查您的班级是否有正确的目标会员资格

miure

赞同来自:

这可能发生在6.0以上的任何Xcode中。在Swift项目中重命名一些ViewController类之后发生了这件事(但我想它也会发生在Obj-C上)。您只需打开界面构建器,转到重命名了其类的ViewController的Identity Inspector,选择class并按Enter键。这会将重命名的类重新分配给选定的ViewController,并重置模块值,该值在重命名类后会丢失。 更新Xcode 8.1(也可能是8.0): Xcode 8.1只是崩溃了。简单而烦人地只是崩溃而且不打印任何东西。我正在追逐幻影崩溃一小时才发现这是同样的事情 - 在IB中未分配的课程。如果您遇到一些幻像崩溃,请首先仔细检查IB是否有未分配的类。

hquae

赞同来自:

为我的Custom Class选择合适的Module我解决了这个问题。 这里是 : enter image description here

qquod

赞同来自:

我通过在所有View控制器和视图的身份检查器的自定义类中键入模块名称(不幸的是,下拉列表将不显示任何内容......)来解决此问题。 您可能还需要指明目标提供商。要实现此目标,您可以在源代码模式下打开故事板,并在ViewController和View尖括号中添加“customModuleProvider”属性。

riure

赞同来自:

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

siusto

赞同来自:

没有别的事情,这对我有用。从终端的项目目录:

[~/Developer/MyProject] grep -rn ViewController * | grep -i xib 
在Xcode中打开匹配的文件作为源代码,并将ViewController的任何实例更改为您实际需要的内容。在我的例子中,我需要打开的文件是Main.storyboard,我将ViewController的实例更改为DetailViewController。 我删除了Xcode和main.storyboard中的两个文件,这是我认为导致这个问题开始的原因。

jenim

赞同来自:

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