Obj-C,我如何处理4个部分的版本号,大于等等

我知道这不是一个具有挑战性的练习,但我想我会问,以防万一在Objective-C等已经有一些方法。

在我的应用程序,我只处理一个2号码的版本号码,例如1.5

我想升级到4位数字,最多可以有4位数字。

所以我需要处理现有的数字,并在传递数据库版本和捆绑版本号时返回false。

目前我只是做

NSString *strOnePointFive = @"1.5"; if (dblDBVersion < [strOnePointFive doubleValue]) { } 

这是一个重复的 ,是在其他格式。 以下是如何处理版本号的一些答案,或者等于,大于或低于所需的版本号。 这是在这个环节的答案..

 NSString *reqSysVer = @"3.1"; NSString *currSysVer = [[UIDevice currentDevice] systemVersion]; if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending) isSupported = YES; else isSupported = NO; 

我所做的就是把这个string分解成组件:

 NSArray *array = [myVersion componentsSeparatedByCharactersInSet:@"."]; NSInteger value = 0; NSInteger multiplier = 1000000; for(NSString *n in array) { value += [n integerValue] * multiplier; multiplier /= 100; } 

这样做会给你一个可以用来进行比较的标准化值,通常会比较具有不同“深度”的版本,即1.5和1.5.2。

如果你有超过100个点的释放(即任何数字大于100),并且会声明1.5.0 == 1.5,则它会中断。 这就是说,它的简短,甜美,使用简单。

编辑:如果您使用NSString'比较:选项:'方法,请确保你有你的string修饰:

  s1 = @"1."; s2 = @"1"; NSLog(@"Compare %@ to %@ result %d", s1, s2, (int)[s1 compare:s2 options:NSNumericSearch]); s1 = @"20.20.0"; s2 = @"20.20"; NSLog(@"Compare %@ to %@ result %d", s1, s2, (int)[s1 compare:s2 options:NSNumericSearch]); 2012-09-06 11:26:24.793 xxx[59804:f803] Compare 1. to 1 result 1 2012-09-06 11:26:24.794 xxx[59804:f803] Compare 20.20.0 to 20.20 result 1