2013-09-24 11 views
39

Muszę zmienić konfigurację niektórych interfejsów na podstawie wersji na iOS, z której korzystam, więc potrzebuję dobrego sposobu na sprawdzenie wersji na iOS. Na razie robię to:Najlepszy sposób na sprawdzenie systemu iOS 7 lub wcześniejszego?

if ([[[UIDevice currentDevice] systemVersion] isEqualToString: @"7.0"]) { 
    //do stuff 
} 

Wolę nie twardo kodować porównania ciągów i podejmować decyzje na podstawie tego. Czy są na to lepsze sposoby?

+0

To pęknie, jeśli wyjdzie iOS 7.1. Ale jesteś na dobrej drodze. Rozwiń łańcuch i porównaj tylko główną wersję, jeśli zależy Ci ogólnie na systemie iOS7. – Krumelur

+1

Czy spojrzał na [1] [1] [tej odpowiedzi?] Http://stackoverflow.com/questions/12561599/how-to-check-ios-version-is-ios-6/12561661 # 12561661 – shrimp

+0

to wygląda najbardziej stabilnie – Huang

Odpowiedz

126

zawsze zachować te w moim Constants.h pliku:

#define IS_IPHONE5 (([[UIScreen mainScreen] bounds].size.height-568)?NO:YES) 
#define IS_OS_5_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0) 
#define IS_OS_6_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 6.0) 
#define IS_OS_7_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) 
#define IS_OS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) 
#define IS_OS_9_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0) 

Chociaż ja zawsze wolę powyższe makra zakończeniu przyjętego odpowiedź, tutaj jest jabłko zatwierdzony sposób:

if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { 

    // do stuff for iOS 7 and newer 

} 
else { 

    // do stuff for older versions than iOS 7 
} 
+3

fajny człowiek, fajny pasek narzędziowy. – Huang

+1

Efektem ubocznym tego jest [[[UIDevice currentDevice] systemVersion] floatValue] zostanie wywołany za każdym razem, gdy użyjesz makra. Metoda systemVersion historycznie była zaskakująco powolna, więc jeśli rekurencja jakiegokolwiek opisu buforuje wartość wyniku. –

+4

To naprawdę nie jest dobre podejście, z wielu powodów. Aby uzyskać szczegółowe informacje, zobacz komentarze na [ten post] (http://stackoverflow.com/a/3341214/214149). – Mac

118
if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { 

    // do stuff for iOS 7 and newer 

} 
else { 

    // do stuff for older versions than iOS 7 
} 
+3

+1 Nigdy wcześniej tego nie widziałem. –

+13

To, co było warte, było sugestią Apple na 2013 Tech Talk podczas sesji na iOS 7 - chociaż owinął 'NSFoundationVersionNumber' w wywołaniu' floor() '. –

+0

Czy nie byłoby 6.2.x, które sprawiłoby, że czek byłby nieważny? –

Powiązane problemy