当iOS目标是3.1.3时找不到UINib

时间:2010-10-12 22:13:31

标签: iphone

您好 我使用SDK 4.1构建iPhone应用程序,并将目标操作系统设置为3.1.3。 当我在运行iOS4.1的设备上安装应用程序时。一切顺利。 当我尝试在运行3.1.3的设备上运行应用程序时,我得到下面的堆栈跟踪。

dyld: Symbol not found: _OBJC_CLASS_$_UINib
  Referenced from: /var/mobile/Applications/BDD67A1E-9B40-43E7-A012-7D92036B2E24/ThisIsMy.app/ThisIsMy
Expected in: /System/Library/Frameworks/UIKit.framework/UIKit
 in /var/mobile/Applications/BDD67A1E-9B40-43E7-A012-7D92036B2E24/ThisIsMy.app/ThisIsMy

我的猜测是,因为UINib仅添加到4.0中的SDK中。

我想知道的是如何缓解这个问题。我该怎么做才能支持3.1.3?

干杯..

2 个答案:

答案 0 :(得分:2)

我强烈建议您弱链接UIKit。这可能会隐藏未来的链接器问题并导致崩溃。我也很不方便告诉链接器UIKit是明显不可选的。大黑客。

相反,使用NSClassFromString:

间接初始化并调用UIPopoverController
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];
}

为了便于携带,我建议编写一个代理对象来处理这些实现细节。

答案 1 :(得分:-1)

首先,您需要将框架引用更改为weak link (aka "optional")。然后使用描述here的技术在调用使用它的代码之前测试一个类。

相关问题