【问题标题】:How to determine the current iPhone OS version at runtime and compare version strings?如何在运行时确定当前的 iPhone OS 版本并比较版本字符串?
【发布时间】:2009-12-27 00:33:17
【问题描述】:

您如何确定和比较(>、= 3.1,我希望能够跳过一些代码。

这需要在运行时而不是编译时!

【问题讨论】:

  • 出于好奇,这个bug是什么?
  • 这是一个核心数据错误,当setPropertiesToFetch:setFetchBatchSize: 用于NSFetchRequest 时会导致崩溃。这只是 3.0 中的一个问题,因为它已由 3.1 解决。这是讨论的链接:devforums.apple.com/message/101589#101589

标签: iphone


【解决方案1】:

例如,您可以执行以下操作:

NSString *reqSysVer = @"3.1";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];

if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending)
 {
    //Do some clever stuff
 }

【讨论】:

  • 这有一个缺陷(错误?) - 如果 reqSysVer 是 4.2 并且当前版本是 4.1,那么测试成功并且你做了一些聪明的事情。问题是该方法只测试第一个数字(我写了一些测试来确定这一点。)请参阅我的建议作为下一条评论。
【解决方案2】:

您的意思是确定操作系统的版本吗? SDK 在构建时是固定的,但操作系统可能会发生变化。要获取操作系统版本,请使用 [UIDevice currentDevice]。系统版本。要获取 SDK 版本,我认为您可以使用 __IPHONE_OS_VERSION_MIN_REQUIRED。

【讨论】:

  • 嗯,好的,是当前的操作系统版本!由于systemVersion 返回一个字符串(@"1.2", @"3.1.2"),如何进行比较并执行 之类的比较?
  • -[NSString intValue] 或 -[NSString floatValue]
  • 如果您需要的不仅仅是点释放,您可能需要使用例如 -[NSString componentsSeparatedByString:] 来解析字符串。
  • 谢谢!我将systemVersion 与此函数的略微修改版本结合使用进行比较:snipplr.com/view/2771/compare-two-version-strings
  • 查看此片段以获得运行时 iOS 版本检查的出色实现:forr.st/~mOO
【解决方案3】:

更可靠的方法是这样做:

static inline NSComparisonResult compareCurVersionTo(int major, int minor, int point)
{
    NSUInteger testVers = major*10000 + minor*100 + point;
    NSUInteger curSysNum = 0;
    NSUInteger multi = 10000;
    for(NSString *n in [[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."]) {
        curSysNum += [n integerValue] * multi;
        multi /= 100;
    }
    if(curSysNum < testVers) return NSOrderedAscending;
    if(curSysNum > testVers) return NSOrderedDescending;
    return NSOrderedSame;
}

这会处理次要版本超过“9”的“Leopard”错误。

【讨论】:

  • 嗨,大卫,感谢您的回答。请参阅以下 sn-p,它提供了执行此检查的最佳方法:forr.st/~mOO 它隐藏在接受答案下的 cmets 中!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 2021-11-21
  • 2011-02-25
  • 1970-01-01
  • 2017-10-26
  • 2012-02-01
  • 1970-01-01
相关资源
最近更新 更多