符号没有发现:_OBJC_CLASS_$_UIPopoverController
-
25-09-2019 - |
题
我有问题我的通用应用程序。我已经设置基SDK的iPhone3.2和设置目标3.1.
我已经转移文件使用的UIPopoverController到他们自己的文件和他们不应该装在装载程序在iPhone上。然而,当我建立我的程序,我得到的以下错误时我建立和调试,以我的设备:
dyld:符号没有发现:_OBJC_CLASS_$_UIPopoverController引用:/var/移动/Applications/B3B90643-92DC-4E5C-8B2F-83A42D6D57E0/市场自行车.应用程序/市场自行车 预计在:/System/Library/Frameworks/UIKit。框架/UIKit 在 /var/移动/Applications/B3B90643-92DC-4E5C-8B2F-83A42D6D57E0/市场自行车.应用程序/市场自行车
我真的希望有人可以帮助我。
最好的问候, 保罗Peelen
解决方案
即使他们不装载在运行时,这些文件仍在处理联系起来。符号 _OBJC_CLASS_$_UIPopoverController
因此,加入到你的应用程序,为那些需要动态联系起来。
有2个解决方法,
- 更换的所有外观UIPopoverController在一个信息(例如
[UIPopoverController alloc]
)与NSClassFromString(@"UIPopoverController")
, 或 - 让UIKit弱的联系。
其他提示
我强烈建议您不可以弱链接的UIKit。作为KennyTM和我在我们的评论中提到,这可能隐藏着未来的连接问题,并导致崩溃。我也根本不舒服,告诉链接器的UIKit是可选的,当它显然不是。大黑客攻击。
相反,初始化和UIPopoverController间接使用NSClassFromString拨打:
Class popover = NSClassFromString(@"UIPopoverController");
if (nil != popover)
{
self.myPopover = [[popover alloc] initWithContentViewController:myContent];
}
如果你仍然有链接错误,则可能需要使用NSSelectorFromString调用UIPopoverController的消息:
Class popover = NSClassFromString(@"UIPopoverController");
if (nil != popover)
{
SEL myInit = NSSelectorFromString(@"initWithContentViewController:");
self.myPopover = [[popover alloc] performSelector:myInit withObject:myContent];
}
有关的便携性,我建议写一个代理对象来处理这些实现的细节。