弱链接popoverBackgroundViewClass使其在< 5.0 IOS中工作

时间:2012-09-18 08:30:51

标签: objective-c ios5 backwards-compatibility weak-linking

已经检查过这个问题:Weak linking UIPopoverBackgroundView 并已阅读:http://www.marco.org/2010/11/22/supporting-older-versions-of-ios-while-using-new-apis#fnref:1

我在.h中声明了一个自定义的PopoverBackgroundView,并在.m文件中实现。然后,在一个文件中,我像这样实例化它

    self.settingsPopover.popoverBackgroundViewClass = [CustomPopoverBackgroundView class];

我试过像马克在上面的链接中所说的那样:

if ([UIPopoverBackgroundView class] != nil) {
    self.settingsPopover.popoverBackgroundViewClass = [CustomPopoverBackgroundView class];
}

但是当我在4.3 ipad模拟器中运行时,我得到了相同的启动错误

dyld: Symbol not found: _OBJC_CLASS_$_UIPopoverBackgroundView

我的基础sdk是IOS 5.1,我的目标部署也是5.1。我正在使用LLVM编译器4.0。

有什么想法吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

您是否尝试将respondsToSelector与相关UIPopoverController setBackgroundViewClass方法一起使用?请记住,除了普通属性语法之外,属性还会自动生成setter和getter方法。

你仍然遇到链接器错误的原因是因为你仍然试图在该类上调用一个不存在的方法。

如果是整个班级不存在的情况,Apple建议使用NSClassFromString(@"UIPopoverController")并检查返回的结果是否为零。