1

如果我将 iPhone 应用的 Base + Active SDK 设置为 3.0,Deployment Target 设置为 2.2,是否可以在 2.2 设备上使用新版本的功能?

例如,UITableViewCell现在需要使用 设置图像[cell.imageView setImage:image],而在 2.2 中,您需要调用[cell setImage:image]. [cell.imageView setImage:image]会在 2.2 设备上使用新的崩溃吗?

4

2 回答 2

3

不,您不能在 2.2 上调用 OS 3.0。不推荐使用的方法至少在 OS 3 中应该表现正常。在操作系统中的许多情况下,不推荐使用只是意味着 Apple 建议使用新方法而不是不推荐使用的方法;但是这些方法将来也可能会消失。

你有几个选择:

  1. 只要应用程序和方法在 OS 3.0 上实际运行,只需忽略警告即可。
  2. 进行运行时检查以确定操作系统版本,并调用适当的方法:

    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指令将不起作用

  3. 放弃对 OS 2.2 的支持。只针对 3.0 也是很合理的,因为 3.X 的使用率非常高。就我的小应用程序而言,12 月,在 2,058 个用户中,我在 3.0 之前的系统上有 27 个用户。不用说,此选项显着减少了您的测试需求。

于 2010-01-06T12:57:56.290 回答
1

不,您不能在 2.x 设备上使用 OS 3.0 调用。如果您甚至可以在 2.x 设备上安装面向 3.0 的应用程序,我会感到惊讶。

于 2010-01-06T12:35:10.567 回答