我有一个专为iPhone OS 2.0设计的应用程序,我正在为它添加一些新的3.x功能。我的想法是保持与旧版本的兼容性。
我到目前为止已经管理过,使用“if respondToSelector ...”来测试已弃用的函数。这对方法内部的调用很好但是如何处理方法名称更改?例如,OS 2.x方法
-imagePickerController:didFinishPickingImage:editingInfo:
在OS 3.x中更改为
-imagePickerController:didFinishPickingMediaWithInfo:
在这种情况下,如何测试操作系统版本并将应用程序指向正确的方法?
感谢您的帮助。
答案 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
另见这篇文章: