我升级到 Xcode 6 beta 4,现在我的应用程序不断崩溃并显示消息
Interface Builder 文件中的未知类 X。
它崩溃是因为据说 Xcode 找不到我在 Storyboard 中链接的自定义类,但它表明它们在 Xcode 界面中正确链接。
我很肯定一切都正确链接。我唯一的其他选择可能是删除整个故事板文件并从头开始,因为它可能以某种方式损坏。
编辑:我还想补充一点,我尝试过清理、重置模拟器、搞乱构建阶段等。这些都不起作用。
我在输入问题时解决了这个问题。我想我会回答我的问题,并将其留给在使用 Xcode 6 beta 4 时可能遇到此问题的其他任何人。
要解决此问题,您需要在 Storyboard 中选择每个自定义类对象(这包括任何自定义视图,甚至自定义视图控制器本身)。
然后选择这些对象,打开身份检查器,在“自定义类”下,您应该会看到模块选项。最后:
在“模块”文本框内单击,然后按 Enter。
或者(2022 年更新),选中“从目标继承模块”选项。
而已!我所有自定义对象的当前模块必须在 Xcode 6 beta 4 中以某种方式在内部错误地设置。但是在检查器中没有视觉指示。
请注意,如果在 Module 文本框中按 enter 不起作用,请尝试选择右侧的箭头并手动选择当前模块,然后清除文本框并按 enter。您也可以尝试在类文本框中按 Enter(尽管这通常是为了解决不同的问题)。
https://i.stack.imgur.com/7u8bd.png
有时 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
,然后错误就消失了。
customModuleProvider
也为我做了,谢谢!
重命名 swift 类后我遇到了这个问题。通过使用@objc 指令解决了这个问题:
@objc(ForumTopicListViewController) class ForumTopicListViewController
@objc class X
并更改为 @objc(X) class X
工作。
@objc()
指令......
具有多个目标的项目
就我而言,我正在处理具有多个目标的项目,问题是“从目标继承”未选中。选择“从目标继承”解决了我的问题
https://i.stack.imgur.com/g6qUI.png
这对我有用..
检查您的编译源,是否添加了该文件(例如 ViewController.m),在我的情况下,未添加 ViewController 文件,因此它给了我错误..
https://i.stack.imgur.com/MqOOq.png
Compile Sources
。对于某些人来说,这确实是正确的(和唯一的)解决方案。
这可能发生在任何高于 6.0 的 Xcode 中。在 Swift 项目中重命名一些 ViewController 类后发生在我身上(但我猜它也会发生在 Obj-C 上)。您只需要打开界面构建器,转到已重命名其类的 ViewController 的 Identity Inspector,选择类并按 Enter。这会将重命名的类重新分配给选定的 ViewController,并重置重命名类后丢失的模块值。
Xcode 8.1 的更新(也可能是 8.0):
Xcode 8.1 只是崩溃了。简单而烦人的只是崩溃并且不打印任何内容。我追了一个小时的幻觉崩溃只是为了发现它是同样的事情 - IB中未分配的课程。如果您遇到一些幻像崩溃,请先仔细检查 IB 是否有未分配的课程。
启用 Inherit Module From Target
采用了正确的目标模块。这解决了这个问题。
https://i.stack.imgur.com/bCh1r.png
有时,您提供的控制器会从当前应用程序中失去其目标成员资格。在这种情况下,在“模块”字段上按 Enter 键将无济于事。转到控制器并确保它已将目标成员资格设置为当前应用程序。
我的回答:将自定义模块设置为等于自定义 Pod 名称(在我的示例中 - 自定义类名),如附加的屏幕截图所示
此解决方案适用于特定情况:来自 Pod(或 Carthage)框架的自定义视图类。
基础设施:XCode8、Swift3
https://i.stack.imgur.com/l4fij.png
为我的 Custom Class
选择合适的 Module
我解决了这个问题。
这里是 :
https://i.stack.imgur.com/h00Oh.png
我通过与 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 中的错误时浪费了多少时间
我在 Xcode 8 中遇到了这个问题,为了解决这个问题,我必须在文本编辑器中修改故事板。
通常,查找您的控件并从控件实体中删除 customModule
和 customModuleProvider
。
为我做了一个伎俩。
我有同样的问题。
就我而言,Xcode 没有将我的自定义类添加到:Target > Build Phase > Compile Sources。
因此,我建议您验证您的 CustomClass.m 是否存在。
https://i.stack.imgur.com/VorFX.png
我希望这可以帮助你。
您需要选中“从目标继承模块”复选框
https://i.stack.imgur.com/ddHdi.png
当我从我的项目中删除 Main.storyboard
、 LaunchScreen.xib
文件和默认的 ViewController
类时,我在 Xcode 6.1 中遇到了这个问题。
我通过从 Info.plist
中删除 Launch Screen File
和 Main Interface
条目来修复它
检查您的班级是否有正确的目标会员资格。
我到处搜索这个。直到我遇到 1 个要求我将项目文件夹移动到桌面的家伙之前,没有一个答案对我有用。它只是自动工作。显然,如果您将项目文件夹深入到许多文件夹中,XCODE 实际上会中断。
这些步骤对我有用。
1) 清除派生数据。 2) 删除 .h 和 .m 文件 3) 再次创建 .h 和 .m 文件
我通过将我的故事板文件作为源代码打开并使用 command-F 搜索我的未知类并删除与之关联的自定义类来解决这个问题。
@gfrs 说的是正确的,您需要设置模块。但是,我曾经遇到过一个问题,即我的课程未在 Class
下拉列表中列出。最终我删除了 swift 文件,重新启动了 Xcode 并重新创建了文件。最后,该类被列出并且可以在 Storyboard 中使用。
还可以看看 this answer,它似乎解决了我遇到的“真正”问题。
我通过在所有视图控制器和视图的身份检查器的自定义类中输入模块名称(不幸的是,下拉列表将不显示任何内容...)解决了这个问题。
您可能还需要指明目标提供者。为了实现这个目标,您可以在源代码模式下打开情节提要,并在 ViewController 和 View 尖括号中添加“customModuleProvider”属性。
我的解决方案(Xcode 8.1 Swift 3.0):
Interface Builder 文件中的未知类 xxx。
打开 StoryBoard 作为源代码并搜索 xxx。删除包含值 xxx 的属性。构建并运行。
customModule="" customModuleProvider=""
就我而言,我在项目设置中向 Other Linker Flags
添加了一个标志 -ObjC
以使其工作。我也尝试使用 -all_load
标志,它也运行良好。
https://i.stack.imgur.com/dPvya.png
就我而言,Storyboard / xib 中引用的类没有设置目标成员资格。
要解决此问题,请为该类的 .h
和 .m
文件提供与其他类相同的 Target Membership。
https://i.stack.imgur.com/NQlvR.png
我的解决方案是从自定义类定义中删除 @objc。
我对 Xcode 6.1 版(6A1052d)也有同样的问题。我认为如果您重命名了 App / Xcode 项目,就会出现问题。
我的解决方案是在界面生成器中手动添加模块名称。
当我将故事板从 Swift 项目移植到 Objective-c 项目时,我遇到了这个问题,注意到 vvkuznetsov's answer,结果这两个项目使用了相同的标识符。我“产品 -> 清洁”并点击模块和类文本字段上的 Enter 键。问题消失了。
我按照劳拉的建议解决了这个问题,但我不需要重新创建文件。
使用 XCode 4,在 Project Navigator 中,选择包含它所抱怨的类的 .m 文件
转到查看->实用程序->显示文件检查器(这将在右侧显示文件检查器,带有 .m 文件信息)
打开 Target Membership 部分并确保为此 .m 文件选择了您的目标
当我将我的 .m 文件添加到我的项目时,由于某种原因它没有将它添加到我的默认目标中,这导致我收到你提到的错误。
我的问题是用户错误。我的故事板和身份检查器的自定义类部分中有一个通用的 UIView,我不小心将名称从 UIView 更改为乱码。
只需将其改回 UIView 即可。
只对我有用的实际上是将模块名称添加到 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 在这种情况下并没有提供多大帮助,因为他们称其为“按预期工作”。
不定期副业成功案例分享
@objc(...)
添加到我的一个 Swift 类后开始发生的问题。