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
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?
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.
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"];
dziękuje Stijnster, twoja kategoria jest świetna ...... ale naprawdę potrzebuję wersji Swift wkrótce ... – wuf810
- 1. Porównywanie ciągów znaków w EL
- 2. Nieczułe na wielkość liter porównywanie ciągów znaków
- 3. Szybkie porównywanie ciągów z listą
- 4. Porównywanie ciągów znaków i stringów w języku Java
- 5. Porównywanie wielu ciągów w Perl
- 6. Bezpieczne porównywanie ciągów w Go
- 7. Porównywanie dwóch ciągów ruby
- 8. Porównanie inteligentnych ciągów znaków
- 9. Porównywanie dwóch ciągów znaków z "==": kiedy to zadziała?
- 10. C# - Porównywanie ciągów różnych kodowań
- 11. Porównywanie ciągów i tablic C#
- 12. Tablica ciągów ciągów znaków
- 13. Porównywanie ciągów w ramce dotnet 4
- 14. Porównywanie ciągów rozdzielanych przecinkami w SQL
- 15. Porównywanie dwóch ciągów w SQL Server
- 16. Szybkie porównywanie ciągu znaków z kolekcją w Javie
- 17. Redcarpet 2.0.1
- 18. C# Porównywanie ciągów z różnymi przypadkami
- 19. Porównywanie ciągów z! = Operator dającym różne wyniki?
- 20. Porównywanie wprowadzanych przez użytkownika znaków w C
- 21. Porównywanie dwóch ciągów znaków w języku Java i identyfikowanie duplikatów słów
- 22. Porównywanie ciągów znaków w C# ignorowanie spacji, powrót karetki lub podziały wierszy
- 23. Obsługa ciągów znaków XML w JS?
- 24. Dopasowywanie rozmytych ciągów znaków
- 25. Niepoprawna operacja ciągów znaków
- 26. C# tłumaczenie ciągów znaków
- 27. PHP: indeksowanie ciągów znaków
- 28. C Biblioteka ciągów znaków
- 29. Przeciążanie literowe ciągów znaków
- 30. Czy porównywanie ciągów == działa tylko dlatego, że ciągi są niezmienne?
NSNumericSearch to znacznie lepsza opcja niż robienie tego ręcznie. – benzado