可可 – “未知的类在Interface Builder文件中”错误在运行时

概述即使Interface Builder知道MyClass,我在启动应用程序时会遇到错误。 这发生在MyClass是库的一部分时,如果我直接在应用程序目标中编译类,则不会发生。 尽管“未知类MyClass在Interface Builder文件中”。错误在运行时打印,这个问题与Interface Builder无关,而是与链接器无关,链接器不链接类,因为没有代码直接使用它。 当在运行时加载.nib数 即使Interface Builder知道MyClass,我在启动应用程序时会遇到错误。

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

解决方法 尽管“未知类MyClass在Interface Builder文件中”。错误在运行时打印,这个问题与Interface Builder无关,而是与链接器无关,链接器不链接类,因为没有代码直接使用它。

当在运行时加载.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& Swift 1.2

Swift视图的定义。一定要覆盖init(coder aDecoder:NSCoder)。 Objective-C视图控制器的定义。和,一个梨树在梨树。

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

总结

以上是内存溢出为你收集整理的可可 – “未知的类在Interface Builder文件中”错误在运行时全部内容,希望文章能够帮你解决可可 – “未知的类在Interface Builder文件中”错误在运行时所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1050623.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存