4

我刚刚安装了 iPhone SDK 3.0,发现 UITableViewCell 的 text 属性不再使用了,应该使用 textLabel.text 代替。这是否意味着我必须知道当前的系统版本并调用相应的方法?像这样。

UITableViewCell *cell = ...;
if ([[[UIDevice currentDevice] systemVersion] isEqualToString:@"3.0"]) {
  cell.textLabel.text = @"...";
} else {
  cell.text = @"...";
}

如果是这样,那将是非常烦人的。

4

6 回答 6

4

您可以检查单元格是否具有新属性,而不是检查操作系统版本:

if ([cell respondsToSelector:@selector(textLabel)]) {
  // Do it the 3.0 way
  cell.textLabel.text = @"...";
} else {
  // Do it the 2.2 way, but avoid deprecation warning
  [cell performSelector:@selector(setText:) withObject:@"..."];
}
于 2009-06-27T23:28:53.050 回答
3

只需为 3.0 构建,不再担心 2.2。与主要的操作系统升级不同,人们一直在非常非常迅速地升级到新版本的 iPhone 操作系统。查看 TapBots 博客上的这篇文章:iPhone 3.0 采用率

到您的应用程序获得批准时(从现在起 2 周 + 一些?)几乎没有人会再使用 2.2 了!

于 2009-06-27T20:42:29.453 回答
1

您可以使用 3.0 SDK 并针对您的项目使用旧版本,例如 2.2 或 2.2.1。

为此,您将 Base SDK 设置为 3.0,但更改 iPhone OS 部署目标设置。如果您在项目中获取信息,则可以访问这两种设置。

于 2009-06-27T20:07:42.940 回答
1

它已被弃用,他们建议使用新方式,但如果您愿意,您当然仍然可以使用 2.2 方式,它不会对您在 3.0 上运行的应用程序产生负面影响。如果您担心仍在使用 2.2 的用户,请务必查看提供的链接。如果您为 3.0 编译,我认为这没什么大不了的。

于 2009-06-27T23:40:35.023 回答
0

实际上,我认为您不必这样做,因为在构建项目时,您可以选择目标固件,例如提到的 pgb。然后你可以简单地使用#ifdef指令。这里有更多信息:iPhone 检查固件版本这里发布了一个更全面的答案:如何定位特定的 iPhone 版本?

编辑:在意识到 systemVersion 实际上是一个字符串后,我删除了一些文本,来源:UIDevice Docs

如果您将在项目中的各种文件中使用它,那么您可以通过将其作为属性添加到您的 appdelegate 来组织它,然后他们通过执行以下操作来检索值:

MyAppDelegate *theDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
NSString *version = theDelegate.version;

但是对于像版本号这样简单的东西来说,这可能太复杂了。

于 2009-06-27T20:16:49.473 回答
0

如果您决定暂时坚持使用 2.2,请务必在模拟器中使用 3.0 进行测试。我们已经看到 2.2 和 3.0 之间的奇怪行为差异,尤其是表格。

于 2009-06-28T01:58:59.407 回答