私がやっていることは、その文字列を取得してコンポーネントに分割することです。
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