在针对较旧的操作系统版本进行定位时,如何有条件地避免使用已弃用的方法?

时间:2010-03-07 18:03:23

标签: iphone iphone-sdk-3.0 ipad

我有一个专为iPhone OS 2.0设计的应用程序,我正在为它添加一些新的3.x功能。我的想法是保持与旧版本的兼容性。

我到目前为止已经管理过,使用“if respondToSelector ...”来测试已弃用的函数。这对方法内部的调用很好但是如何处理方法名称更改?例如,OS 2.x方法

-imagePickerController:didFinishPickingImage:editingInfo:

在OS 3.x中更改为

-imagePickerController:didFinishPickingMediaWithInfo:

在这种情况下,如何测试操作系统版本并将应用程序指向正确的方法?

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您可以使用NSObject的-respondsToSelector方法动态确定方法是否存在,然后调用它。您可能还希望使用-performSelector:withObject:来调用方法,因此您不会收到编译器警告。

答案 1 :(得分:0)

行。

经过第二次阅读,我发现,我没有完全解决你的问题。如果实现这两种方法,则任何一种方法都将在运行时执行。如果它是2.x -imagePickerController:didFinishPickingImage:editingInfo:将被执行,如果它是3.x,则另一个将被调用

这是我过早写过的废话以及评论与之相关的内容:

  

你可以使用

#ifdef __IPHONE_3_0
// iPhone 3.0 specific stuff
#else
// iPhone 2.2 specific stuff
#endif
     

另见这篇文章:

     

What #defines are set up by Xcode when compiling for iPhone