如何通过读取“[MyClass class]”的行来修复“Interface Builder 文件中的未知类 <MyClass>”错误?
Posted
技术标签:
【中文标题】如何通过读取“[MyClass class]”的行来修复“Interface Builder 文件中的未知类 <MyClass>”错误?【英文标题】:How “Unknown class <MyClass> in Interface Builder file” error can be fixed with a line reads "[MyClass class]"? 【发布时间】:2013-11-09 09:56:11 【问题描述】:我阅读了以下答案,所以我知道 "Unknown class in Interface Builder file" 错误可以使用 -ObjC
链接器选项解决。 (仅供参考,MyClass 在静态库中。)
https://***.com/a/6092090/534701
我还发现 App Delegate 中的单行 [MyClass class]
代码可以在不使用 -ObjC
选项的情况下处理相同的问题。 我的问题是代码是如何工作的。
根据我上面附加的答案,发生错误是因为我的静态库中的符号未加载。那么,这意味着[MyClass class]
使链接器在运行时加载符号? (这没有意义)
【问题讨论】:
【参考方案1】:链接器将尝试通过删除未使用的符号来减小最终二进制文件的大小。从 Storyboard 实例化的类是使用反射创建的,因此链接器无法知道该类是否正在使用,因此它已从最终二进制文件中删除。
通过将该行添加到您的代码中,您将强制链接器在编译时(而不是在运行时)添加该类,从而使来自 Storyboard 的反射调用按预期工作。
【讨论】:
谢谢。不要混淆,我添加了一个提示链接器与运行时无关的句子。【参考方案2】:我也遇到过这个问题。接受的答案并没有解决我的答案。这是解决我的答案的方法,我认为应该这样做的实际方式是:
在 IB 中,您可以在其中选择您的班级,下方还有另一个下拉菜单,您可以在其中输入班级名称,称为“模块”。在这里,您可以不选择任何内容(对于 Objective-C 中的类),或者您可以选择一个预填充的模块,通常是您的应用程序的名称。如果你这样做,运行时会理解这个类在一个名为的 Swift 模块中运行并且能够加载它。
这适用于一开始仅作为 Obj-C 并且后来添加了一些 swift 类的项目。
【讨论】:
谢谢!这正是我所需要的。应该修复IB来处理这个问题。以上是关于如何通过读取“[MyClass class]”的行来修复“Interface Builder 文件中的未知类 <MyClass>”错误?的主要内容,如果未能解决你的问题,请参考以下文章
Myclass.class与new MyClass()有什么区别?
使用POI读取EXCEL中的数据如何获得表中实际数据的行数?