【发布时间】:2010-10-25 03:34:06
【问题描述】:
大家好
我想为 iPhone 2.2.* 和 3.0 版制作一个应用程序。 2.2* 中的某些方法在 3.0 中已弃用。 (如 UITableViewCell setText 和 setLabel )
有什么方法可以检查 iPhone 上使用的是哪个固件版本并设置不同的使用方法
【问题讨论】:
标签: iphone objective-c firmware
大家好
我想为 iPhone 2.2.* 和 3.0 版制作一个应用程序。 2.2* 中的某些方法在 3.0 中已弃用。 (如 UITableViewCell setText 和 setLabel )
有什么方法可以检查 iPhone 上使用的是哪个固件版本并设置不同的使用方法
【问题讨论】:
标签: iphone objective-c firmware
您将需要使用预处理器指令进行条件编译,例如 __IPHONE_3_0 并构建两个单独的可执行文件。
例如:
#ifdef __IPHONE_3_0 // 特定于版本 3 的代码 #别的 // 特定于版本 2 的代码 #结尾如果您需要在运行时检测版本,您可以使用 [[UIDevice currentDevice] systemVersion]。它返回带有当前 iPhone OS 版本的字符串。
【讨论】:
正如在另一个引用线程中提到的,虽然您可以使用预处理器指令从一个代码库生成两个应用程序,但您仍然需要两个应用程序(一个用于 2.x,一个用于 3.x)
编译时指令不能用于做出运行时决定。
其他线程中有更多详细信息。
【讨论】:
替代解决方案,只需使用 respondsToSelector 进行检查。例如-
CGSize expectedLabelSize;
if ([subTitle respondsToSelector:@selector(sizeWithAttributes:)])
{
expectedLabelSize = [subTitle sizeWithAttributes:@{NSFontAttributeName:subTitleLabel.font}];
}else{
expectedLabelSize = [subTitle sizeWithFont:subTitleLabel.font constrainedToSize:subTitleLabel.frame.size lineBreakMode:NSLineBreakByWordWrapping];
}
【讨论】: