不,你不能在我们的OS 3.0调用2.2。至少在操作系统3中,弃用的方法应该是正常的。在许多情况下,在操作系统中弃用,只是表示苹果推荐使用新方法而不推荐使用新方法;但这些方法也可能在未来消失。
您有几种选择:
- 根本无视警告,只要应用程序和方法上的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
指令赢得” t工作
删除OS 2.2支持。由于3.X的吸收率相当高,因此您仅以3.0为目标是相当合理的。在我的小应用程序中,在12月份,我有2,058位用户使用3.0系统之前的27位用户。不用说,这个选项可以显着减少您的测试需求。
不够公平 - 我希望在部署目标被适当设置时,系统会在编译时挑选新的函数调用。我个人更喜欢使用'if([cellrespondsToSelector:@selector(imageView)])'作为我的运行时检查,但我确定这是一个偏好问题;) – Ted 2010-01-06 13:06:08
我加了你的建议。 respondsToSelector肯定比操作系统检查我的意见更好,只是忘了它! Objective-C是一种动态语言,因此在编译时方法不会得到解决。 – notnoop 2010-01-06 13:11:33
不错的。我仍然好奇,但是会[''cell.imageView setImage:image]'刚刚在运行时崩溃了2.2?不幸的是,我没有2.2设备进行测试。 – Ted 2010-01-06 13:18:49