iPhone SDK 3.0 Vs. 2.2.1

时间:2009-06-27 14:52:45

标签: iphone iphone-sdk-3.0 uitableview

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

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

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

6 个答案:

答案 0 :(得分: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:@"..."];
}

答案 1 :(得分:3)

只需构建3.0,不再担心2.2。与主要操作系统升级不同,人们已经非常快速地升级到新版本的iPhone OS。在TapBots博客上查看此帖子:iPhone 3.0 Adoption Rate

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

答案 2 :(得分:1)

您可以使用3.0 SDK并在项目中定位旧版本,例如2.2或2.2.1。

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

实际上,我认为你不必这样做,因为在你构建你的项目时,你选择了它所针对的固件,比如上面提到的pgb。然后你可以简单地使用#ifdef指令。以下是更多信息:iPhone check firmware version此处发布了更全面的答案:How to target a specific iPhone version?

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

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

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

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

答案 5 :(得分:0)

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