根据iOS版本启用不同的功能

时间:2010-12-02 16:13:23

标签: iphone objective-c ios version

在我们正在构建的应用程序中,我们希望使用UILocalNotifications,它只能从4.0获得。

检查对象是否响应选择器非常简单,但是如何根据操作系统在类上定义委托方法呢?我得到的问题是我的app delegate实现了

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 

方法,它使应用程序在iOS 3.2设备(ipad)上启动时崩溃。

首选不需要发布多个版本。

4 个答案:

答案 0 :(得分:6)

您需要使用名为“弱链接”的功能,该功能适用​​于iOS 3.1或更高版本。您需要遵循一些非常具体的步骤,这些步骤在4.2 “what's new” document中进行了概述(在文档中搜索“弱链接”)。

HTH!

答案 1 :(得分:3)

一个好方法是检查一下:

#ifdef __IPHONE_4_0 // if iPhoneOS is 4.0 or greater then __IPHONE_4_0 will be defined

    //code
#endif

如果您正在处理低于4.0的操作系统,如果在该编译器指令中看不到任何代码。

答案 2 :(得分:0)

Marco Arment最近有一篇关于它的文章,有很好的见解:

Supporting older versions of iOS while using new APIs

答案 3 :(得分:-1)

您可以将委托方法更改为使用id作为3.2上不可用的类的类型,即:

-(void)application:(UIApplication *)application didReceiveLocalNotification:(id)notification 

在方法主体中,照常检查UILocalNotification。 notification参数可以转换为UILocalNotification。

我很惊讶这会导致崩溃,因为该方法不应该被调用。如果在方法定义中更改类型没有帮助,则可能由于某种原因调用该方法。在这种情况下,尝试在方法中设置断点以找出原因。