मैंने सोचा कि मैं सिर्फ एक समारोह साझा करूँगा जो मैंने इसके लिए एक साथ खींचा था। यह बिल्कुल सही नहीं है। कृपया उदाहरण और परिणाम देखें। लेकिन अगर आप अपने स्वयं के संस्करण संख्याओं की जाँच कर रहे हैं (जो मुझे डेटाबेस माइग्रेशन जैसी चीज़ों को प्रबंधित करने के लिए करना है) तो इससे थोड़ी मदद मिल सकती है।
(यह भी, विधि में लॉग बयानों को हटा दें, निश्चित रूप से। वे वहां हैं जो आपको यह देखने में मदद करने के लिए हैं कि यह क्या करता है)
टेस्ट:
[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"];
परिणाम:
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
ध्यान दें कि अल्फा काम करता है लेकिन आपको इसके साथ बहुत सावधान रहना होगा। एक बार जब आप किसी बिंदु पर अल्फा जाते हैं, तो आप इसके पीछे किसी भी अन्य छोटी संख्या को बदलकर विस्तार नहीं कर सकते।
कोड:
- (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;
}