ChatGPT解决这个技术问题 Extra ChatGPT

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

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

Interface Builder 文件中的未知类 X。

它崩溃是因为据说 Xcode 找不到我在 Storyboard 中链接的自定义类,但它表明它们在 Xcode 界面中正确链接。

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

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

@ImreKelényi 你是对的。在做了你刚才描述的事情之后,这件事最近再次发生在我身上。
这对我来说是错字,将它调试到 Control 元素,直到它出现,选择;查看控制器 > 身份检查器 > 自定义类 > 类。如果未定义该类,请删除它。
请注意!这种“错误”可能源于不同的来源。如果接受的答案对您不起作用,请向下移动并尝试下一个答案。我的情况的正确答案是第五个答案。

T
Top-Master

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

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

然后选择这些对象,打开身份检查器,在“自定义类”下,您应该会看到模块选项。最后:

在“模块”文本框内单击,然后按 Enter。

或者(2022 年更新),选中“从目标继承模块”选项。

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

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

https://i.stack.imgur.com/7u8bd.png


对我来说,在“模块”内部单击并按 Enter 并不能始终如一地工作,但选择“类”字段(并按 Enter)总是可以完成这项工作。
对我来说,目标设置正确,但课程仍然没有出现在 IB 中。不过,我注意到文件的“位置”显示了“相对于项目”的路径,而不是“相对于组”的路径。删除文件引用和组并将其重新添加到项目根目录中对我有用。
哇。谢谢你,否则我想我不会到达那里。这解决了在我将 @objc(...) 添加到我的一个 Swift 类后开始发生的问题。
这个问题在 XCode 7.2 中仍然存在。这个解决方案奏效了。
这仍然是 Xcode 8.3.1 中的一个问题......真可惜
n
noɥʇʎԀʎzɐɹƆ

有时 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,然后错误就消失了。
Guillermo,截至 3 月底仍在 Xcode 中发生!
@MaciejSwic 删除 customModuleProvider 也为我做了,谢谢!
xib 文件呢?
还在发生......正是这样的事情让我想哭:(
u
user1760527

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

@objc(ForumTopicListViewController) class ForumTopicListViewController

这为我解决了这个问题,我有 @objc class X 并更改为 @objc(X) class X 工作。
您也可以尝试删除派生数据,请参阅stackoverflow.com/questions/24039932/…
从 Single View 项目模板重命名默认 ViewController 类后出现此问题。我想知道使用了什么魔法,以便“原始”ViewController 类不需要 @objc() 指令......
我走到对面。我在 Storyboard 文件中指定了模块名称,但还添加了 @objc 指令。
没有为我工作。 :( 模块名称的解决方案也不起作用。
M
Muhammad Nayab

具有多个目标的项目

就我而言,我正在处理具有多个目标的项目,问题是“从目标继承”未选中。选择“从目标继承”解决了我的问题

https://i.stack.imgur.com/g6qUI.png


感谢您发布此信息。很快解决了我看到的问题。
我也有类似的情况。 (XCode 9.4.1) 我创建了一个名为 FilesTestA 的 iOS 应用程序,其中包含一个名为 MxFileView 的自定义 UIView(由 MxFileView.swift 和 MxFileView.xib 组成)。然后我添加了另一个目标:Today 小部件(“FilesTestAWidget”)。小部件中使用MxFileView的解决方案: (1) class = "MxFileView"; (2) 勾选“Inherit Module from Target”(或取消勾选,手动输入“FilesTestAWidget”); (3) 在应用程序目标中,确保 MxFileView.swift 和 MxFileView.xib 在它们的 Target Membership 中包含 FilesTestAWidget。
这发生在我使用 Xcode 10.1 中的默认模板(一个 iOS 应用程序目标和 2 个测试目标)的一个新项目中。我的所有自定义视图控制器都未选中该复选框(因此占位符文本为“无”)。在我的故事板中检查并检查每个自定义视图控制器的复选框后,问题得到了解决。
m
mavericks

这对我有用..

检查您的编译源,是否添加了该文件(例如 ViewController.m),在我的情况下,未添加 ViewController 文件,因此它给了我错误..

https://i.stack.imgur.com/MqOOq.png


@CarmenA 您只会将“.m”文件添加到 Compile Sources。对于某些人来说,这确实是正确的(和唯一的)解决方案。
我尝试了其他几种解决方案,但都没有运气。这成功了。出于某种奇怪的原因,一个目标缺少让我适应的一个源文件。
对我来说也是..因为一些解决冲突而发生
j
jovanjovanovic

这可能发生在任何高于 6.0 的 Xcode 中。在 Swift 项目中重命名一些 ViewController 类后发生在我身上(但我猜它也会发生在 Obj-C 上)。您只需要打开界面构建器,转到已重命名其类的 ViewController 的 Identity Inspector,选择类并按 Enter。这会将重命名的类重新分配给选定的 ViewController,并重置重命名类后丢失的模块值。

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

Xcode 8.1 只是崩溃了。简单而烦人的只是崩溃并且不打印任何内容。我追了一个小时的幻觉崩溃只是为了发现它是同样的事情 - IB中未分配的课程。如果您遇到一些幻像崩溃,请先仔细检查 IB 是否有未分配的课程。


谢谢你。似乎遵循您的建议会导致 Xcode 将模块(在 IB 中的类下)从无更新为当前。我在想问题是简单地输入名称而不按回车键无法触发 Xcode 的模块更新。
这对我有用。我无意中重命名了一个控制器类,因此在加载视图控制器时它显然不再存在。
A
Arnab

启用 Inherit Module From Target 采用了正确的目标模块。这解决了这个问题。

https://i.stack.imgur.com/bCh1r.png


确认。这帮助我解决了这个问题。
当我将视图控制器从 Objective-C 转换为 Swift 时,我通常会遇到这个问题。我重新输入最后一个字母,然后按 Enter。也应该这样做。
F
Furqan Khan

有时,您提供的控制器会从当前应用程序中失去其目标成员资格。在这种情况下,在“模块”字段上按 Enter 键将无济于事。转到控制器并确保它已将目标成员资格设置为当前应用程序。


这也是我的问题——多个目标导致类文件意外地没有包含在我正在构建的目标中。
我合并了文件并在我的一个目标中错过了这个,很好的答案
好一个,合并 pbx 打破了目标成员资格值。
T
Tamara

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

此解决方案适用于特定情况:来自 Pod(或 Carthage)框架的自定义视图类。

基础设施:XCode8、Swift3

https://i.stack.imgur.com/l4fij.png


r
roy

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

这里是 :

https://i.stack.imgur.com/h00Oh.png


O
Orlin Georgiev

我通过与 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 中的错误时浪费了多少时间


G
George Maisuradze

我在 Xcode 8 中遇到了这个问题,为了解决这个问题,我必须在文本编辑器中修改故事板。

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

为我做了一个伎俩。


哈!不错的黑客:)
r
rcmstark

我有同样的问题。

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

因此,我建议您验证您的 CustomClass.m 是否存在。

https://i.stack.imgur.com/VorFX.png

我希望这可以帮助你。


这就是发生在我身上的事情,幸运的是我找到了出路!我是来回答的,但你是第一个。谢谢!!!
M
Mike Zriel

您需要选中“从目标继承模块”复选框

https://i.stack.imgur.com/ddHdi.png


V
Vinay Jain

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

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


J
Jayprakash Dubey

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


V
VBaarathi

我到处搜索这个。直到我遇到 1 个要求我将项目文件夹移动到桌面的家伙之前,没有一个答案对我有用。它只是自动工作。显然,如果您将项目文件夹深入到许多文件夹中,XCODE 实际上会中断。


我在 Xcode 7 beta 5 中再次遇到了这个问题,因为我之前在 Xcode 6 中遇到过这个问题。这一次,这种方法对我有用。
在 Visual Studio 中也有类似的问题。但是在那边,我们会收到一条明确的警告消息,指出路径太长,无法添加或编辑内容。不确定它是否与 XCODE 相同,但在那一集之后,我将所有项目都保存在文档或桌面中,再也没有遇到过这个问题。我什至向使用 Xamarin Studio 的人提供了这个建议,它也对他们有用......
A
ARWIN

这些步骤对我有用。

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


这也对我有用。我什至在不清除派生数据的情况下让它工作。
这对我有用,非常感谢 Arwin,但我仍然不明白为什么它会引发这样的错误,因为我之前没有在课堂或 IB 中修改任何内容
W
Wraithseeker

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


C
Community

@gfrs 说的是正确的,您需要设置模块。但是,我曾经遇到过一个问题,即我的课程未在 Class 下拉列表中列出。最终我删除了 swift 文件,重新启动了 Xcode 并重新创建了文件。最后,该类被列出并且可以在 Storyboard 中使用。

还可以看看 this answer,它似乎解决了我遇到的“真正”问题。


删除和重新添加类文件对我有用。谢谢!
T
Teng Long

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

您可能还需要指明目标提供者。为了实现这个目标,您可以在源代码模式下打开情节提要,并在 ViewController 和 View 尖括号中添加“customModuleProvider”属性。


i
ibrahimyilmaz

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

Interface Builder 文件中的未知类 xxx。

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


怎么回事?这对我来说是绝对必要的,谢谢。我不得不删除 customModule="" customModuleProvider=""
如果我们尝试将包含此类错误的应用程序发布到应用商店,应用程序会被不假思索地拒绝。
我不同意。我刚刚提交了一个我必须以这种方式修改的构建到 TestFlight 并且它已准备好进行 Beta 测试......我们将看到实际应用商店会发生什么,但它是一个 IB 错误 IMO。谢谢!
R
Rostyslav Druzhchenko

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

https://i.stack.imgur.com/dPvya.png


p
pkamb

就我而言,Storyboard / xib 中引用的类没有设置目标成员资格。

要解决此问题,请为该类的 .h.m 文件提供与其他类相同的 Target Membership。

https://i.stack.imgur.com/NQlvR.png


这是我的问题,但是在尝试各种解决方案时,我导致了 Epic Byte 的答案修复的问题。您必须在您正在构建的目标中拥有源代码,而且在 IB 中,您需要将视图控制器设置为当前目标的一部分。
目标会员也是我的问题,到处找,但多亏了这个答案,我可以解决它。
D
DenisKirillov

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


一些带有解释的例子会很棒。
p
patrickS

我对 Xcode 6.1 版(6A1052d)也有同样的问题。我认为如果您重命名了 App / Xcode 项目,就会出现问题。

我的解决方案是在界面生成器中手动添加模块名称。


C
Community

当我将故事板从 Swift 项目移植到 Objective-c 项目时,我遇到了这个问题,注意到 vvkuznetsov's answer,结果这两个项目使用了相同的标识符。我“产品 -> 清洁”并点击模块和类文本字段上的 Enter 键。问题消失了。


J
Jignesh Kalantri

我按照劳拉的建议解决了这个问题,但我不需要重新创建文件。

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

转到查看->实用程序->显示文件检查器(这将在右侧显示文件检查器,带有 .m 文件信息)

打开 Target Membership 部分并确保为此 .m 文件选择了您的目标

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


S
Scooter

我的问题是用户错误。我的故事板和身份检查器的自定义类部分中有一个通用的 UIView,我不小心将名称从 UIView 更改为乱码。

只需将其改回 UIView 即可。


我做了同样的事情,但是我不小心将自定义视图控制器名称添加到了 ViewControllers 根视图的自定义类部分。所以我想看看为什么当它一直是根视图时无法找到视图控制器。
C
Community

只对我有用的实际上是将模块名称添加到 xib 文件中......

Sooo,xib 文件如下所示:

mymodule.MyViewController.xib (Module being the name of the proyect, usually)

在我看来,这是一个可怕的解决方案,但这应该是苹果希望我们现在这样做的方式。

This question shows 3 possible work arounds back in beta 4 ...据一些人说,显然 Apple 在这种情况下并没有提供多大帮助,因为他们称其为“按预期工作”。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅