在 2.2 设备上使用 iPhone OS 3.0 函数调用代替已弃用的 2.2 函数调用
-
19-09-2019 - |
题
如果我将iPhone应用的Base + Active SDK设置为3.0,部署目标设置为2.2,我可以在2.2设备上使用新版本的功能吗?
例如, UITableViewCell
现在需要使用设置图像 [cell.imageView setImage:image]
, ,而在 2.2 中,你可以调用 [cell setImage:image]
. 。会用新的 [cell.imageView setImage:image]
在 2.2 设备上崩溃?
解决方案
不,你不能在 2.2 上调用 OS 3.0。已弃用的方法至少在 OS 3 中应表现正常。在操作系统中的许多情况下,弃用只是意味着 Apple 建议使用新方法而不是弃用的方法;但这些方法将来也可能消失。
你有几个选择:
- 只要应用程序和方法实际上在 OS 3.0 上运行,就可以忽略警告。
进行运行时检查以确定操作系统版本,并调用适当的方法:
double version = [[[UIDevice currentDevice] systemVersion] doubleValue]; if (version >= 3.0) { [cell.imageView setImage:image]; } else { [cell setImage:image]; }
或者更好:
if ([cell respondsToSelector:@selector(imageView)]) { [cell.imageView setImage:image]; } else { [cell setImage:image]; }
请注意,编译时检查,使用
ifdef
指令不起作用放弃操作系统 2.2 支持。您只以 3.0 为目标也是非常合理的,因为 3.X 的采用率相当高。就我的小型应用程序而言,12 月份,在 2,058 个用户中,有 27 个用户使用 3.0 之前的系统。不用说,这个选项显着减少了您的测试需求。
其他提示
没有,你不能使用OS 2.x版本的设备上3.0来电。我会感到惊讶,如果你甚至可以2.x版本的设备上安装了一个3.0的目标应用程序。
不隶属于 StackOverflow