我阅读了以下答案,因此我知道“Interface Builder文件中的未知类”错误可以使用-ObjC
链接器选项解决。 (仅供参考,MyClass在静态库中。)
https://stackoverflow.com/a/6092090/534701
我还发现App Delegate中的单行[MyClass class]
代码可以在不使用-ObjC
选项的情况下处理同样的问题。 我的问题是代码如何运作。
根据我上面附上的答案,发生错误是因为我的静态库中的符号未加载。那么,这意味着[MyClass class]
使链接器在运行时加载符号? (这没有意义)
答案 0 :(得分:2)
链接器将尝试通过删除未使用的符号来减少最终的二进制大小。从Storyboard实例化的类是使用反射创建的,因此链接器不可能知道是否正在使用该类,因此它将从最终的二进制文件中删除。
通过在代码中添加该行,您强制链接器在编译时(而不是在运行时)添加该类,从而使Storyboard的反射调用按预期工作。
答案 1 :(得分:1)
我也遇到过这个问题。接受的答案并没有解决我的答案。以下是解决了我的答案,以及我认为应该采取的实际方式:
在IB中,您可以选择您的课程,下面还有另一个下拉菜单,您可以在其中输入您的课程名称,称为“模块”。在这里,您可以选择任何内容(对于Objective-C中的类),也可以选择预填充模块,通常是应用程序的名称。如果这样做,运行时会理解该类在名为Swift模块的情况下运行,并且能够加载它。
这适用于仅以Obj-C开头的项目,稍后会添加一些swift-class。