1

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

到目前为止,我已经设法使用“if respondToSelector ...”来测试不推荐使用的功能。这对于方法内部的调用很好,但是如何处理方法名称的更改?例如,OS 2.x 方法

-imagePickerController:didFinishPickingImage:editingInfo:

在 OS 3.x 中更改为

-imagePickerController:didFinishPickingMediaWithInfo:

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

谢谢你的帮助。

4

2 回答 2

3

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

于 2010-03-07T19:45:10.537 回答
0

好的。

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

这是我过早写的废话,评论与以下内容有关:

你可以使用

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

另见这篇文章:

为 iPhone 编译时 Xcode 设置了什么#defines

于 2010-03-07T19:42:57.340 回答