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

Tùn*_* Đỗ 18 iphone ios4

可能重复:
检查iPhone iOS版本

我试过这段代码:

#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_2_2)
    NSLog(@"iPhone 4.2");
#endif
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助.

董道

Mos*_*ieb 27

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

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

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

这样,您可以计划代码以使用功能(如果可用),而不是基于操作系统版本.


Bou*_*rne 21

float version = [[[UIDevice currentDevice] systemVersion] floatValue]; 
Run Code Online (Sandbox Code Playgroud)


Hen*_*oke 6

或者,甚至更好:

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

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

if( systemVersion > 4.1 ){...}


wal*_*ter 5

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

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

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

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

if(kCFCoreFoundationVersionNumber > kCFCoreFoundationVersionNumber_iPhoneOS_4_0)
{
    NSLog( @"After Version 4.0" ); 
}
else
{
    NSLog( @"Version 4.0 or earlier" ); 
}
Run Code Online (Sandbox Code Playgroud)

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