我想检查用户是否在iOS 5.0以下运行应用程序,并在应用程序中显示一个标签。

我如何以编程方式检测哪个iOS正在用户的设备上运行?

谢谢!


当前回答

更新

在iOS 8中,我们可以在NSProcessInfo上使用新的isOperatingSystemAtLeastVersion方法

   NSOperatingSystemVersion ios8_0_1 = (NSOperatingSystemVersion){8, 0, 1};
   if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:ios8_0_1]) {
      // iOS 8.0.1 and above logic
   } else {
      // iOS 8.0.0 and below logic
   }

注意,这会在iOS 7上崩溃,因为该API在iOS 8之前并不存在。如果您支持iOS 7及以下版本,则可以安全地使用

if ([NSProcessInfo instancesRespondToSelector:@selector(isOperatingSystemAtLeastVersion:)]) {
  // conditionally check for any version >= iOS 8 using 'isOperatingSystemAtLeastVersion'
} else {
  // we're on iOS 7 or below
}

原始答案iOS < 8

为了完整起见,以下是苹果在iOS 7 UI过渡指南中提出的另一种方法,其中包括检查基础框架版本。

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
   // Load resources for iOS 6.1 or earlier
} else {
   // Load resources for iOS 7 or later
}

其他回答

[[[UIDevice currentDevice] systemVersion] floatValue]
[[UIDevice currentDevice] systemVersion]

[[UIDevice currentDevice] systemVersion];

或者像这样检查版本

你可以从这里得到下面的宏。

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(IOS_VERSION_3_2_0))      
{

        UIImageView *background = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cs_lines_back.png"]] autorelease];
        theTableView.backgroundView = background;

}

希望这能有所帮助

要获得分隔主版本和次版本的更具体版本号信息:

NSString* versionString = [UIDevice currentDevice].systemVersion;
NSArray* vN = [versionString componentsSeparatedByString:@"."];

数组vN将以字符串形式包含主版本和次版本,但如果您想进行比较,版本号应该存储为数字(int)。你可以添加这段代码将它们存储在c数组* versionNumbers中:

int versionNumbers[vN.count];
for (int i = 0; i < sizeof(versionNumbers)/sizeof(versionNumbers[0]); i++)
    versionNumbers[i] = [[vN objectAtIndex:i] integerValue];

*这里使用的c数组更简洁的语法。

在MonoTouch:

要获得Major版本,请使用:

UIDevice.CurrentDevice.SystemVersion.Split('.')[0]

对于小版本使用:

UIDevice.CurrentDevice.SystemVersion.Split('.')[1]