1

これが難しい演習ではないことはわかっていますが、objective-cなどにすでにいくつかのメソッドがある場合に備えて、質問したいと思いました.

私のアプリでは、1.5などの2つのバージョン番号のみを処理します

これを最大 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 に答える