我有问题我的通用应用程序。我已经设置基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个解决方法,

  1. 更换的所有外观UIPopoverController在一个信息(例如 [UIPopoverController alloc])与 NSClassFromString(@"UIPopoverController"),
  2. 让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];
}

有关的便携性,我建议写一个代理对象来处理这些实现的细节。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top