2010-11-18 8 views
15

Mögliche Duplizieren:
Check iPhone iOS VersionWie erkennt man das aktuelle iOS 4.1 oder 4.2?

habe ich versucht, mit diesem Code:

#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_2_2) 
    NSLog(@"iPhone 4.2"); 
#endif 

aber wenn ich es laufen wieder auf Simulator 4.1, erhalte ich immer noch das Protokoll „iPhone 4,2 "in der Konsole.

Vielen Dank für Ihre Hilfe.

Tung Do

+7

Sowohl 4.1 als auch 4.2 sind ≥ 2.2. – kennytm

+5

# Wenn/# endif sind * Kompilierzeit * Direktiven. Sie vergleichen nur mit Ihren Build-Einstellungen, um zu sehen, auf welche Betriebssystemversion Sie abzielen. Aber der gleiche Code wird unabhängig davon, auf welchem ​​Betriebssystem Sie laufen, ausgegeben. Sie möchten eine * Laufzeitprüfung * durchführen. – benzado

+0

Versuchen Sie dieses: http://jayprakashdubey.blogspot.in/2014/07/check-device-os-version.html –

Antwort

27

Sie sollten wahrscheinlich vermeiden insgesamt über die Systemversion zu fragen.

Ein besseres Design würde nach einer bestimmten Funktion fragen.

Zum Beispiel: if (NSClassFromString(@"UIPrintInfo")) würde Ihnen sagen, ob das aktuelle Gerät die Druck-API unterstützt, verfügbar in 4.2 oder höher.

Auf diese Weise können Sie Ihren Code planen, um ein Feature zu verwenden, wenn es verfügbar ist und nicht auf der Betriebssystemversion basiert.

+0

Danke. Dieser Code funktioniert perfekt. –

21
float version = [[[UIDevice currentDevice] systemVersion] floatValue]; 
+0

Danke. Dieser Code funktioniert wie erwartet, aber ich denke, Zigfrieds Lösung ist flexibler. –

+0

überprüfen Sie diesen Beitrag hat eine gute Antwort http://www.techpaa.com/2012/11/best-way-checking-iphone-ios-version.html – ShivaPrasad

3

Regel 1: Verlassen Sie sich nicht auf die Version oder den Gerätetyp, um festzustellen, ob eine Funktion verfügbar ist. Verschiedene Geräte (iPhone, iPod Touch und iPad) können die gleiche Funktion aber in verschiedenen Versionen des Betriebssystems erhalten. Link schwach gegen Frameworks und fehlende Klassen wird nil sein. Oder verwenden Sie NSClassFromString() Funktion, die auch nil zurückgibt, wenn eine Klasse nicht vorhanden ist. Verwenden Sie auch -[NSObject respondsToSelector:], um abzufragen, ob eine Methode existiert oder nicht.

Regel 2: Apple-schreckt die definierten Konstanten verwenden (wie __IPHONE_2_2), wenn für die Versionen Überprüfung, anstatt ihre numerische Werte als solche verwendet werden:

#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 40200) 
    NSLog(@"BUILT against iPhone 4.2 or later"); 
#endif 

Aber nehmen Sie Mitteilung #if Compile-Zeit mit Direktive wird nur prüfen, welche Version des SDK Sie Build gegen nicht welche Version des OS wird später auf laufen.

+0

dieser Code wird auch in iPhone 4.0 und 4.1 –

5

Sie können dies bei der Kompilierung oder zur Laufzeit entweder tun.

Zur Kompilierung verwenden Sie die sogenannten Verfügbarkeit Makros:

#if __IPHONE_OS_VERSION_MAX_ALLOWED > 40000 // __IPHONE_4_0 
    NSLog(@"After Version 4.0"); 
#else 
    NSLog(@"Version 4.0 or earlier"); 
#endif 

das Problem mit Compile-Zeit ist jedoch, dass Sie mehrere Binärdateien zu halten haben. Wenn Sie möchten, dass diese Binärdatei auf Pre-4.x ausgeführt wird, sollten Sie eine schwache Verbindung zu den iOS-Bibliotheken herstellen.

if(kCFCoreFoundationVersionNumber > kCFCoreFoundationVersionNumber_iPhoneOS_4_0) 
{ 
    NSLog(@"After Version 4.0"); 
} 
else 
{ 
    NSLog(@"Version 4.0 or earlier"); 
} 

Es gibt ein gutes Tutorial hier: http://cocoawithlove.com/2010/07/tips-tricks-for-conditional-ios3-ios32.html

+0

ja ausgeführt werden, aber ich möchte das iPhone 4.2 mit dem anderen erkennen. –

6

Oder, noch besser:

CGFloat systemVersion = [[[ UIDevice currentDevice ] systemVersion ] floatValue ];

Dann können Sie eine einfache Überprüfung der Gleichheit, z.

if(systemVersion > 4.1){...}

Verwandte Themen