在我们正在构建的应用程序中,我们希望使用UILocalNotifications,它只能从4.0获得。
检查对象是否响应选择器非常简单,但是如何根据操作系统在类上定义委托方法呢?我得到的问题是我的app delegate实现了
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
方法,它使应用程序在iOS 3.2设备(ipad)上启动时崩溃。
首选不需要发布多个版本。
答案 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最近有一篇关于它的文章,有很好的见解:
答案 3 :(得分:-1)
您可以将委托方法更改为使用id
作为3.2上不可用的类的类型,即:
-(void)application:(UIApplication *)application didReceiveLocalNotification:(id)notification
在方法主体中,照常检查UILocalNotification。 notification
参数可以转换为UILocalNotification。
我很惊讶这会导致崩溃,因为该方法不应该被调用。如果在方法定义中更改类型没有帮助,则可能由于某种原因调用该方法。在这种情况下,尝试在方法中设置断点以找出原因。