iPhone SDK 3.0 对比2.2.1

Posted

技术标签:

【中文标题】iPhone SDK 3.0 对比2.2.1【英文标题】:iPhone SDK 3.0 Vs. 2.2.1 【发布时间】:2009-06-27 14:52:45 【问题描述】:

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

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

如果是这样,那会很烦人。

【问题讨论】:

【参考方案1】:

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

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:@"..."];

【讨论】:

【参考方案2】:

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

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

【讨论】:

嗨,这可用于开发通用应用程序cocoabugs.blogspot.com/2010/09/…【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

实际上,我认为您不必这样做,因为当您构建项目时,您可以选择它的目标固件,例如提到的 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;

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

【讨论】:

【参考方案6】:

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

【讨论】:

以上是关于iPhone SDK 3.0 对比2.2.1的主要内容,如果未能解决你的问题,请参考以下文章

我在哪里可以获得 iPhone 2.0 SDK?

iphone sdk 3.2 到 4.0 笔尖编辑

在iPhone 3.0 SDK中改变了渐变技巧?

iPhone - 在 3.0 和 4.0 操作系统/SDK 上播放视频?

MAP 与 iPhone 3.0 SDK 一起使用都有哪些限制?

在 iPhone 3.0 SDK 中为 MoviePlayer 添加自定义控件