Tôi nghĩ tôi chỉ chia sẻ một chức năng mà tôi đã tập hợp lại cho việc này. Nó không hoàn hảo chút nào. Hãy xem các ví dụ và kết quả. Nhưng nếu bạn đang kiểm tra số phiên bản của riêng mình (mà tôi phải làm để quản lý những thứ như di chuyển cơ sở dữ liệu) thì điều này có thể giúp ích một chút.
(tất nhiên, hãy xóa các câu lệnh nhật ký trong phương thức. những câu lệnh đó ở đó để giúp bạn xem tất cả những gì nó làm)
Kiểm tra:
[self isVersion:@"1.0" higherThan:@"0.1"];
[self isVersion:@"1.0" higherThan:@"0.9.5"];
[self isVersion:@"1.0" higherThan:@"0.9.5.1"];
[self isVersion:@"1.0.1" higherThan:@"1.0"];
[self isVersion:@"1.0.0" higherThan:@"1.0.1"];
[self isVersion:@"1.0.0" higherThan:@"1.0.0"];
[self isVersion:@"1.0b" higherThan:@"1.0a"];
[self isVersion:@"1.0a" higherThan:@"1.0b"];
[self isVersion:@"1.0a" higherThan:@"1.0a"];
[self isVersion:@"1.0" higherThan:@"1.0RC1"];
[self isVersion:@"1.0.1" higherThan:@"1.0RC1"];
Các kết quả:
1.0 > 0.1
1.0 > 0.9.5
1.0 > 0.9.5.1
1.0.1 > 1.0
1.0.0 < 1.0.1
1.0.0 == 1.0.0
1.0b > 1.0a
1.0a < 1.0b
1.0a == 1.0a
1.0 < 1.0RC1 <-- FAILURE
1.0.1 < 1.0RC1 <-- FAILURE
chú ý rằng alpha hoạt động nhưng bạn phải rất cẩn thận với nó. một khi bạn chuyển sang alpha ở một số điểm, bạn không thể mở rộng điều đó bằng cách thay đổi bất kỳ số nhỏ nào khác đằng sau nó.
Mã:
- (BOOL) isVersion:(NSString *)thisVersionString higherThan:(NSString *)thatVersionString {
if ([thisVersionString compare:thatVersionString options:NSNumericSearch] == NSOrderedAscending) {
NSLog(@"%@ < %@", thisVersionString, thatVersionString);
return NO;
}
if ([thisVersionString compare:thatVersionString options:NSNumericSearch] == NSOrderedSame) {
NSLog(@"%@ == %@", thisVersionString, thatVersionString);
return NO;
}
NSLog(@"%@ > %@", thisVersionString, thatVersionString);
return YES;
}