检查OS版本的功能/类?

时间:2011-08-08 08:56:20

标签: ios objective-c cocoa-touch

我正在开发一个我想在iOS4和iOS5上运行的应用程序但是对于iOS5的用户我想使用iOS5功能作为界面的一部分(iOS4用户将获得不那么令人兴奋的东西)。我的问题是检查设备上特定操作系统的可用性的过程是什么。我的理解是我不检查操作系统版本,而是查看特定课程的可用性,任何人都可以帮助我摆脱最佳方式...

4 个答案:

答案 0 :(得分:4)

iOS下的NDA不是吗?

无论如何,要检查某个功能是否存在,请尝试以下操作:

if (NSClassFromString(@"UIStepper")) {
    //enter code here
} else {
    //enter code here
}

根据您的需求进行定制。

编辑:iOS 5现已发布,所以我现在可以在我的代码中添加“UIStepper”。

答案 1 :(得分:2)

Class stepperClass = NSClassFromString(@"UIStepper");
if (stepperClass) {
    // class is available, use it
} else {
    // class not available, don't use it or use something else
}

答案 2 :(得分:2)

iOS5属于NDA,因此我不会提及任何可能存在或可能不存在的新类。但是,以下代码应该执行您想要的操作。它取自docs

if ([UINewClass class]) {
    // Create an instance of the class and use it.

} else {
    // Alternate code path to follow when the
    // class is not available.

}

这使用弱链接,因此要求新类(UINewClass)位于您用于编译的SDK中。它是iOS 4.2中引入的一个相对较新的功能,可能不受所有框架的支持。解决方法是使用旧样式(来自上面的相同链接):

Class cls = NSClassFromString (@"UINewClass");
if (cls) {
    // Create an instance of the class and use it.
} else {
    // Alternate code path to follow when the
    // class is not available.
}

答案 3 :(得分:2)

如果你试图让UIStepper在4.x中正常降级,你不仅可以使用

if( NSClassFromString(@"UIStepper") )

相反,您还必须检查具有响应的UIStepper特定选择器。正如哈利伍德在博A的评论中所说,一个好方法是:

if( NSClassFromString(@"UIStepper") && [theStepper respondsToSelector:@selector(setValue:)] )

这解决了我在iOS 4.x下崩溃的问题。

Harry Wood帮助我解决了我所看到的问题,我希望他能得到这个荣誉。