2010-12-02 27 views
3

在我们构建的应用程序中,我们希望使用UILocalNotifications,它只能从4.0版本中获得。根据iOS版本启用不同的功能

检查对象是否响应一个选择是很容易的,但我怎么能去有关定义上根据不同的操作系统一类的委托方法?我得到的问题是,我的应用程序委托实现

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

方法,这使得在启动应用程序崩溃的iOS一个3.2设备(新iPad)上。

不必释放多个构建将是首选。

回答

6

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

HTH!

3

一个不错的方法是检查:

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

    //code 
#endif 

如果你使用一个操作系统打交道低于4.0,如果甚至不会看到编译器指令中的任何代码。

+1

谢谢,但不会使用的#ifdef只是去掉从编译的代码,如果目标是小于4.0? – sharvey 2010-12-02 16:23:08

+0

当然,但是如果设备小于4.0,您是否需要去除该方法? – 2010-12-02 16:28:40

+0

事实上,我可能需要iOS版本的多个目标,对吧? – sharvey 2010-12-02 16:34:02

-1

你可以改变的委托方法使用id为不可用类上3.2的类型,即:

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

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

我很惊讶,这会导致系统崩溃,虽然,因为该方法不应该获取调用。如果在方法定义中更改类型不起作用,则可能是因为某种原因而调用该方法。在这种情况下,尝试在方法中设置断点以找出原因。

相关问题