即使接口构建器知道MyClass,启动应用程序时会遇到错误。

这会发生MyClass是库的一部分,如果我直接在应用程序目标中编译了类,就不会发生。

答案

尽管 “接口构建器文件中未知类myclass。“在运行时打印了错误,此问题与接口构建器无关,而与链接器无关,而链接器没有链接类,因为没有代码直接使用它。

当.nib数据(从.xib汇编)在运行时加载时,MyClass使用字符串引用,但是链接器不分析代码功能,只有代码存在,因此它不知道。由于没有其他源文件引用,因此链接器在制作可执行文件时将其优化。因此,当Apple的代码试图加载此类类时,它找不到与之关联的代码,并打印警告。

默认情况下,Objective-C目标将具有-all_load -ObjC默认设置的标志将保留所有符号。但是我从C ++目标开始,没有。尽管如此,我找到了解决这个问题的方法,这使连接器保持了侵略性。

我最初使用的黑客是添加一个空的静态例程,例如:

+(void)_keepAtLinkTime;

什么都不做,但是我会打电话一次,例如:

int main( int argc, char** argv )
{
   [MyClass _keepAtLinkTime];
   // Your code.
}

这将迫使链接器保持整个课程,并且错误消失。

正如JLStrecker在评论中指出的那样,我们实际上不需要添加_keepAtLinkTime方法。简单地调用现有的,例如:

   [MyClass class];

做问题(只要您从一个NSObject)。

当然,您可以在代码的任何位置调用它。我想这甚至可能是无法达到的代码。这个想法是愚弄链接者以为MyClass在某个地方使用,以至于它在优化它时不会那么积极。

Xcode 6.3.2

视图的快速定义。init(coder aDecoder: NSCoder)

将模块名称添加到 Nib 详细信息检查器中,您可以在其中选择课程。

来自: stackoverflow.com