0

我阅读了以下答案,因此我知道可以使用链接器选项解决“Interface Builder 文件中的未知类”错误。-ObjC(仅供参考,MyClass 在静态库中。)

https://stackoverflow.com/a/6092090/534701

我还发现 App Delegate 中的单行[MyClass class]代码可以在不使用-ObjC选项的情况下处理相同的问题。我的问题是代码如何工作。

根据我上面附加的答案,发生错误是因为我的静态库中的符号未加载。那么,这是否意味着[MyClass class]让链接器在运行时加载符号?(这没有意义)

4

2 回答 2

2

链接器将尝试通过删除未使用的符号来减小最终二进制文件的大小。从 Storyboard 实例化的类是使用反射创建的,因此链接器不可能知道是否正在使用该类,因此将其从最终二进制文件中删除。

通过将该行添加到您的代码中,您将强制链接器在编译时(而不是在运行时)添加该类,从而使来自 Storyboard 的反射调用按预期工作。

于 2013-11-09T10:02:19.237 回答
1

我也遇到了这个问题。接受的答案并没有解决我的答案。这是解决我的答案的方法,我认为应该这样做的实际方式是:

在 IB 中,您可以选择您的班级,在您输入班级名称的下方还有另一个下拉菜单,称为“模块”。在这里,您可以不选择任何内容(对于 Objective-C 中的类),或者您可以选择一个预填充的模块,通常是您的应用程序的名称。如果你这样做,运行时会理解这个类在一个名为的 Swift 模块中运行并且能够加载它。

这适用于一个仅作为 Obj-C 开始的项目,后来添加了一些 swift-classes。

于 2014-09-13T07:22:23.813 回答