1

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

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

我想将此升级为 4 个数字,最多可以有 4 个数字。

因此,当传递数据库版本和捆绑版本号时,我需要处理现有数字并返回 true 或 false。

目前我只是做

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

}
4

2 回答 2

1

这是重复的,是其他格式的。以下是有关如何处理版本号的一些答案,无论是等于、大于还是低于所需的版本号。这是此链接中的答案..

NSString *reqSysVer = @"3.1";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending)
    isSupported = YES;
else
    isSupported = NO;
于 2012-09-06T13:16:16.717 回答
0

我所做的是把那个字符串分解成组件:

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 'compare:options:' 方法,请确保您的字符串修饰得很好:

    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
于 2012-09-06T13:14:26.633 回答