1

ソフトウェアのバージョンを比較しようとしています... 5.4.9 としましょう

companysettings.software は nsstring です

if ([companysettings.software version //some type of value] < 5.4.9) {

//you need to update blah blah blah

} else {

//proceed with app flow

}

小数点以下が複数ある数値を比較するにはどうすればよいですか?

4

6 に答える 6

3

IMO コンポーネントを分離して連続的に比較することをお勧めします。バージョン番号を単一の番号にすると、エラーが発生する可能性があります (例: 5.1.2 = 5.12)。

于 2012-06-28T13:22:34.107 に答える
1

この投稿には、私が見つけた中で最高の答えがあります。Objective-Cのバージョン番号を比較してください

これは、バージョンを比較する最も簡単な方法です。「1」<「1.0」<「1.0.0」であることに注意してください。

NSString* requiredVersion = @"1.2.0";
NSString* actualVersion = @"1.1.5";

if ([requiredVersion compare:actualVersion options:NSNumericSearch] == NSOrderedDescending) {
  // actualVersion is lower than the requiredVersion
}
于 2012-07-03T13:09:18.013 に答える
1

これはより良い答えです...この場合、私が探しているバージョンは6.0.6です6.0.5はversionLowerをTRUEにトリガーします

NSArray *versionStrings = [companySettings.softwareVersion componentsSeparatedByString:@"."];

BOOL versionLower = FALSE;

for (int i = 0; i < 3; i++) {

    switch (i) {
        case 0:

            if ([[versionStrings objectAtIndex:0] intValue] < 6) {
                versionLower = TRUE;
            }
            break;

        case 1:

            if ([[versionStrings objectAtIndex:1] intValue] < 0) {
                versionLower = TRUE;
            }
            break;

        case 2:

            if ([[versionStrings objectAtIndex:2] intValue] < 6) {
                versionLower = TRUE;
            }
            break;

        default:
            break;
    } 
}

if (!versionLower) {

//version of software is okay... proceed with flow

}
于 2012-06-28T13:37:04.660 に答える
0
//Suppose these are the versions
NSString *version1 = @"4.3.2";
NSString *version2 = @"3.2.1.8";

//split first two characters of your version
NSString *first2digitversion1 = [version1 substringToIndex:2];
NSString *first2digitversion2 = [version2 substringToIndex:2];

//now get remaining part of string
NSString *remainVersion1 = [version1 substringFromIndex:2];
NSString *remainVersion2 = [version2 substringFromIndex:2];

//now remove the "." from string
remainVersion1 = [remainVersion1 stringByReplacingOccurrencesOfString:@"." withString:@""];
remainVersion2 = [remainVersion2 stringByReplacingOccurrencesOfString:@"." withString:@""];

//now merge both
NSString *comPareStr1 = [[NSString stringWithFormat:first2digitversion1]stringByAppendingString:remainVersion1];
NSString *comPareStr2 = [[NSString stringWithFormat:first2digitversion2]stringByAppendingString:remainVersion2];

// now you will get 4.32 and 3.218 
//and this is the comparision
if([comPareStr1 floatValue] > [comPareStr2 floatValue])
{
    NSLog(@"comPareStr1 is greater");
}
else
{
    NSLog(@"comPareStr2 id greater");
}
于 2012-06-28T13:45:02.363 に答える
0

あなたの要件に応じていくつかの変更を行い、 arrayIndexOfBoundException を防ぎます:しかし、ロジックは理解しやすいでしょう..

 NSString *firstVersion = @"5.4.9";
 NSArray *firstChunks = [firstVersion componentsSeparatedByString: @"."];

 NSString *secondVersion = @"6.4.9";
 NSArray *secondChunks = [secondVersion componentsSeparatedByString: @"."];

  for(int i = 0 ; i< [firstChunks count] ; i++){
      int first = [[firstChunks objectAtIndex:i] intValue];
      int second = [[secondChunks objectAtIndex:i] intValue];
      if(first>second){
         NSLog(@"first version in heigher");
     }
     else
         NSLog(@"second version in heigher");
}

これはあなたを助けるかもしれません

于 2012-06-28T13:57:17.500 に答える
-1

これは私がしたことです...

文字列から小数を取り除き、比較します

NSString *stringWithoutDecimals = [companySettings.softwareVersion stringByReplacingOccurrencesOfString:@"." withString:@""];

if ([stringWithoutDecimals intValue]  >= 606) {

}
于 2012-06-28T13:21:11.507 に答える