2

我目前在 App Store 上有一个使用 2.2.1 版本构建的应用,即 Base SDK 和 Deployment Target 都设置为 2.2.1。该应用程序运行良好。从那时起,我已将我的 XCode 版本升级到 3.1.3,并且我正在对我的应用程序进行更新,其中 Base SDK 设置为 3.0,部署目标设置为 2.2.1。这在我运行 OS 3.0 的测试 iPhone 设备上运行良好。问题是我没有在 2.2.1 上测试的设备,所以我使用模拟器,并且某些 UI 元素(主要是图像)在我当前的构建中没有显示。奇怪的是,当我在模拟器上使用当前版本的 XCode 测试已经在 App Store 上的旧版本应用程序时,我遇到了同样的 UI 消失问题。同一个版本怎么会有不同的结果?XCode 有什么变化吗?什么'

谢谢!

4

2 回答 2

3

2.2.1 应用程序无法在 iPhone 模拟器上运行:当应用程序运行时,从“硬件”>“版本”菜单检查模拟器的硬件版本。虽然不是完全相同的问题,但报告了有关自动选择正确的模拟器版本的问题。请参阅问题#388298相关文章(请参阅未决问题)。如果未设置为 2.2.1,则唯一的选择可能是手动设置它并在没有调试器的情况下启动应用程序。

一般支持向后兼容性是一个很好的关于这样做的文章。您应该在运行时检查版本,而不是在编译时,因为后者会从二进制文件中遗漏向后兼容的代码。另外,不要忘记弱链接任何仅限 3.0 的框架,例如 MapKit 和 GameKit。上面的文章展示了如何做到这一点。

注意:您可以使用respondsToSelector:. 这有点麻烦,但获取和设置属性只是语法糖,所以:

cell.image;
cell.image = anImage;
// corresponds to
if ([cell respondsToSelector:@selector(image)]) {
    [cell image];
    [cell setImage:anImage];
}

此外,为每个不同版本保留不同的目标可能会有所帮助,以便您可以轻松地在它们之间切换。

于 2009-08-15T01:44:01.050 回答
2

某些方法在 2.2.1->3.0 更改中被弃用,包括几个 UI 方法(UITableViewCellinitWithStyle:很容易想到)。我会检查以确保您对 UI 对象的所有调用都与 3.0 兼容,尤其是在构造或显示消失对象的区域中。

于 2009-08-14T02:38:02.717 回答