2013-09-24 10 views
39

Çalıştığım iOS sürümüne göre bazı kullanıcı arayüzlerini yeniden yapılandırmam gerekiyor, bu yüzden iOS sürümünü kontrol etmenin iyi bir yoluna ihtiyacım var. defa yapıyorum olma:En İyi iOS 7 veya daha önceki sürümleri kontrol etmek için?

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

sert koduna değil bu dize karşılaştırmaları tercih ve buna dayanarak kararlar olurdu. Bunu yapmanın daha iyi yolları var mı?

+0

iOS 7.1 çıkması durumunda bu durum kesilir. Ama doğru yoldasınız. Genelde iOS7'yi önemsiyorsanız, dizgiyi artırın ve sadece ana sürümü karşılaştırın. – Krumelur

+1

Baktığınız ekleyen [1] [1] [Bu cevap?]: Http://stackoverflow.com/questions/12561599/how-to-check-ios-version-is-ios-6/12561661 # 12561661 – shrimp

+0

Bu en kararlı – Huang

cevap

126

hep Constants.h dosyasında olanlar tutun: Hep kabul edilen yanıt tamamlanması için yukarıdaki makro, tercih edeceksiniz rağmen

#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) 

, burada elma onaylı yoludur:

if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { 

    // do stuff for iOS 7 and newer 

} 
else { 

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

havalı adam, güzel yardımcı bant. – Huang

+1

yan etkisi, [[UIDevice currentDevice] systemVersion] floatValue], makroyu her kullandığınızda çağrılır. SystemVersion yöntemi tarihsel olarak şaşırtıcı bir şekilde yavaşlamıştır, bu nedenle herhangi bir açıklamanın özeti varsa sonuç değerini önbelleğe alır. –

+4

Bu, birkaç nedenden ötürü, gerçekten iyi bir yaklaşım değildir. Ayrıntılar için lütfen [bu gönderi] hakkındaki yorumları görün (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

görünüyor +1 Daha önce hiç görmedim. –

+13

Değeri için bu, Apple'ın iOS 7 oturumunu benimsemede 2013 Tech Talk'taki önerisiydi - "NSFoundationVersionNumber" özelliğini "floor()" aramasına dahil ettiler). –

+0

Çeki geçersiz kılacak bir 6.2.x olmaz mıydı? –

İlgili konular