2011-08-10 14 views
5

Potrzebuję pobrać numer wersji aplikacji użytkownika i porównać go z bieżącą wersją aplikacji na moim serwerze. Jeśli wersja aplikacji użytkownika jest niższa, wyświetli się pop-up, aby zaktualizować swoją aplikację. Robiąc to, muszę porównać wersję aplikacji z dostępnymi wersjami. Jak mogę porównać łańcuchy, które są w formacie "2.0.1" i "2.0.09" i uzyskać najwyższy z nich, w Objective-C?Porównywanie ciągów znaków w formacie "2.0.1", "2.0.09"

Odpowiedz

5

Nie testowałem tego (nie na OS X teraz), więc jest to pełne ujęcie w ciemności. Co powiesz na temat korzystania z metody NSString przy użyciu metody compare:options:?

NSString *v1 = "2.0.1"; 
NSString *v2 = "2.1"; 

NSComparisonResult *r= [v1 compare:v2 options:NSNumericSearch]; 
if (r == NSOrderedSame || r == NSOrderedDescending) { 
    // do 
} else { 
    // do 
} 

Czy to działa?

4

Jeśli ciągi są wszystkie postaci „2.0.1” itd. Można po prostu porównać je jak jest z odpowiednimi opcjami:

([localVersionString compare:currentVersionString 
        options:NSNumericSearch] != NSOrderedAscending); 

Powyższy wróci „YES”, jeśli nie jest localVersion starsze niż currentVersion na serwerze i "NO" w przeciwnym razie (zakładając, że mam to we właściwy sposób).

Jest to normalne działanie podczas sprawdzania lokalnej wersji iOS zainstalowanej w urządzeniu iDevice.

+0

NSNumericSearch to znacznie lepsza opcja niż robienie tego ręcznie. – benzado

3

Jak odpowiedział w tym poście; Compare version numbers in Objective-C

Sprawdź moją kategorię NSString, która implementuje łatwą weryfikację wersji github; https://github.com/stijnster/NSString-compareToVersion

[@"1.2.2.4" compareToVersion:@"1.2.2.5"]; 

to zwróci NSComparisonResult który jest bardziej dokładna, a następnie za pomocą;

[@"1.2.2" compare:@"1.2.2.5" options:NSNumericSearch] 

Pomocnicy są również dodawane;

[@"1.2.2.4" isOlderThanVersion:@"1.2.2.5"]; 
[@"1.2.2.4" isNewerThanVersion:@"1.2.2.5"]; 
[@"1.2.2.4" isEqualToVersion:@"1.2.2.5"]; 
[@"1.2.2.4" isEqualOrOlderThanVersion:@"1.2.2.5"]; 
[@"1.2.2.4" isEqualOrNewerThanVersion:@"1.2.2.5"]; 
+0

dziękuje Stijnster, twoja kategoria jest świetna ...... ale naprawdę potrzebuję wersji Swift wkrótce ... – wuf810

Powiązane problemy