如何检测当前iOS是4.1还是4.2?

时间:2010-11-18 07:27:38

标签: iphone ios4

  

可能重复:
  Check iPhone iOS Version

我尝试使用此代码:

#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_2_2)
    NSLog(@"iPhone 4.2");
#endif

但是当我在模拟器4.1上再次运行它时,我仍然在控制台中获得日志“iPhone 4.2”。

感谢您的帮助。

Tung Do

6 个答案:

答案 0 :(得分:27)

您应该完全避免询问系统版本。

更好的设计会询问特定功能。

例如:if (NSClassFromString(@"UIPrintInfo"))会告诉您当前设备是否支持4.2或更高版本的打印API。

通过这种方式,您可以计划代码以使用功能(如果可用),而不是基于操作系统版本。

答案 1 :(得分:21)

float version = [[[UIDevice currentDevice] systemVersion] floatValue]; 

答案 2 :(得分:6)

或者,甚至更好:

CGFloat systemVersion = [[[ UIDevice currentDevice ] systemVersion ] floatValue ];

然后,您可以进行简单的等式检查,例如

if( systemVersion > 4.1 ){...}

答案 3 :(得分:5)

您可以在编译时或运行时执行此操作。

对于编译时,您使用所谓的可用性宏:

#if __IPHONE_OS_VERSION_MAX_ALLOWED > 40000 // __IPHONE_4_0
    NSLog( @"After Version 4.0" ); 
#else
    NSLog( @"Version 4.0 or earlier" ); 
#endif

然而,编译时的问题是你必须维护多个二进制文件。如果您希望此二进制文件在4.x之前运行,那么您应该弱链接到iOS库。

if(kCFCoreFoundationVersionNumber > kCFCoreFoundationVersionNumber_iPhoneOS_4_0)
{
    NSLog( @"After Version 4.0" ); 
}
else
{
    NSLog( @"Version 4.0 or earlier" ); 
}

这里有一个很好的教程: http://cocoawithlove.com/2010/07/tips-tricks-for-conditional-ios3-ios32.html

答案 4 :(得分:3)

规则1:不依赖于版本或设备类型来确定功能是否可用。不同的设备(iPhone,iPod Touch和iPad)可以在不同版本的操作系统中获得相同的功能。 弱框架和缺少类的链接将是nil。或者使用NSClassFromString()函数,如果某个类不存在,该函数也会返回nil。还可以使用-[NSObject respondsToSelector:]来查询方法是否存在。

规则2:Apple在检查版本时不鼓励使用定义的常量(例如__IPHONE_2_2,而是使用它们的数值:

#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 40200)
   NSLog(@"BUILT against iPhone 4.2 or later");
#endif

但请注意使用#if编译时指令只会检查构建的SDK的版本,而不是以后运行的操作系统的哪个版本

答案 5 :(得分:1)

试试这个:

NSString * v = [[[UIDevice currentDevice] systemVersion] substringToIndex:0];

更多参考: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIDevice_Class/Reference/UIDevice.html