2010-11-18 26 views
15

可能重複:
Check iPhone iOS Version如何檢測當前的iOS是4.1還是4.2?

我試着用這個代碼:

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

,但是當我在模擬器4.1再次運行它,我仍然得到日誌「iPhone 4.2「在控制檯中。

感謝您的幫助。

東待辦事項

+7

4.1和4.2均≥2.2。 – kennytm 2010-11-18 07:34:59

+5

#if /#endif是* compile-time *指令。他們所做的只是與您的構建設置進行比較,以查看您的目標操作系統版本。但是無論您在哪個操作系統上運行,都會輸出相同的代碼。你想要一個*運行時間*檢查。 – benzado 2010-11-18 08:15:07

+0

試試這個:http://jayprakashdubey.blogspot.in/2014/07/check-device-os-version.html – 2014-07-30 10:13:20

回答

27

你或許應該避免詢問有關係統的版本完全。

更好的設計會問一個特定的功能。

例如:如果當前設備支持的打印API,在4.2或更高版本中提供if (NSClassFromString(@"UIPrintInfo"))會告訴你。

這樣,你可以計劃你的代碼以使用功能,如果它是可用的,在不基於操作系統版本。

+0

謝謝。此代碼完美無缺。 – 2010-11-19 09:37:52

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

謝謝。此代碼按預期工作,但我認爲Zigfried的解決方案更加靈活。 – 2010-11-19 09:39:04

+0

檢查這個帖子它有很好的答案http://www.techpaa.com/2012/11/best-way-checking-iphone-ios-version.html – ShivaPrasad 2012-11-15 09:41:15

3

規則1:不要依賴版本或設備類型來確定功能是否可用。不同的設備(iPhone,iPod Touch和iPad)可以獲得相同的功能,但在不同版本的操作系統上。 對框架的弱連接和缺失的類將是nil。或者使用NSClassFromString()函數,如果一個類不存在,函數也會返回nil。還可以使用-[NSObject respondsToSelector:]來查詢方法是否存在。

規則2:

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

但使用#if編譯時就留意了:蘋果公司使用定義的常量(如__IPHONE_2_2的版本檢查的時候,而不是用自己的數值爲這樣的鼓勵指令只會檢查您的針對構建的SDK的版本,而不是哪個版本的操作系統將在上運行。

+0

這個代碼會運行在iPhone 4.0和4.1 – 2010-11-19 09:35:28

5

您可以在編譯時或運行時做到這一點。

對於編譯時,使用所謂的可用性宏:

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

然而,編譯時的問題是,你必須保持多個二進制文件。如果你想讓這個二進制文件在4.x之前運行,那麼你應該鏈接到iOS庫。

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

有一個很好的教程在這裏: http://cocoawithlove.com/2010/07/tips-tricks-for-conditional-ios3-ios32.html

+0

是的,但我想檢測iPhone 4.2與其他。 – 2010-11-19 09:40:49

6

,或者甚至更好:

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

然後,你可以做一個簡單的平等檢查,例如,

if(systemVersion > 4.1){...}

相關問題