arbeiten Es gibt etwa eine Million Möglichkeiten, wie Sie zu diesem gehen könnten, aber hier ist ein kurzes Beispiel:
void versionStringComponents(NSString* versionStr_, NSInteger* major__, NSInteger* minor__, NSInteger* bugfix__)
{
NSArray* elements = [versionStr_ componentsSeparatedByString:@"."];
*major__ = [[elements objectAtIndex:0] intValue];
*minor__ = [[elements objectAtIndex:1] intValue];
*bugfix__ = 0;
if([elements count] > 2)
{
*bugfix__ = [[elements objectAtIndex:2] intValue];
}
}
bool versionLessThan(NSString* versionStr1_, NSString* versionStr2_)
{
NSInteger major1 = 0, minor1 = 0, bugfix1 = 0;
versionStringComponents(versionStr1_, &major1, &minor1, &bugfix1);
NSInteger major2 = 0, minor2 = 0, bugfix2 = 0;
versionStringComponents(versionStr2_, &major2, &minor2, &bugfix2);
return (
major1 < major2 ||
(major1 == major2 && minor1 < minor2) ||
(major1 == major2 && minor1 == minor2 && bugfix1 < bugfix2)
);
}
Offensichtlich ist dies ein kleines Programm ist, wie versionStringComponents()
trennt blind die Versionsnummern von einer Zeichenkette, verwandelt sie in Ints usw. Außerdem könnte es ein paar mehr Vergleichsfunktionen verwenden, aber ich bin sicher, dass Sie diese herausfinden können.
This link, wie mentioned by Saphrosit, ist ein viel kürzerer Weg zur Erledigung der gleichen Aufgabe, aber erfordert die Verwendung von Code aus dem Sparkle-Framework.
Probieren Sie es aus. Sie wollen die Zeichenkette durch die Punkte teilen, in Ints konvertieren, als Ihre Vergleiche. – sdolan
Dies kann ein schwierigeres Problem sein, als man denken könnte, abhängig davon, wie Sie Dinge vergleichen müssen. Wenn Sie nur für genau die gleiche Verwendung vergleichen müssen, ist isEqualToString: ', aber wenn Sie relative Vergleiche und partielle Vergleiche machen müssen, dann bedarf es eines Gedankens und eines Plans, basierend darauf, wie viel Flexibilität Sie benötigen. (Beachten Sie jedoch, dass 'componentsSeparatedByString:' die ID-Nummer einer Punkt-getrennten Version gut trennen kann.) –
danke @Saphrosit. Genau das suche ich. Soll ich diese Frage löschen? –