2010-10-17 50 views
3

此檢查是否適用於iPad和iPhone?我想我只是在iPad上使用術語「iPhone」而感到困惑。有什麼我需要檢查的iPad操作系統版本或宏指的是一般的iOS版本。將#if __IPHONE_4_0工作在iPad上嗎?

#if __IPHONE_4_0 
// Do stuff 
#elif __IPHONE_3_0 
// Do 3.0 stuff 
#endif 

回答

8

__IPHONE_3_0之類的問題是,即使定位其他iOS版本,也會定義它們;它們是版本識別常量,不是識別目標iOS版本的常量。使用__IPHONE_OS_VERSION_MIN_REQUIRED

#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_4_0 
#elif __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_3_0 
#else 
#endif 

甚至:

#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 40000 
#elif __IPHONE_OS_VERSION_MIN_REQUIRED >= 30000 
#else 
#endif 

避開在評論中所提到的錯誤「How to target a specific iPhone version?__IPHONE_OS_VERSION_MAX_ALLOWED也可能是有用的,在有限的情況下。

而且,是的,應用運行在什麼設備上並不重要。這些常量由編譯器定義,並且不存在於設備上。一旦預處理器運行,就不會有宏。儘管設備本身存在差異,但iPhone和iPad都運行iOS,而這正是您的目標。

+0

謝謝,這正是我一直在尋找的。 – 2010-10-18 00:03:19

1

您發佈的代碼是一個編譯器指令。這意味着它不會在iPad或iPhone上運行。它在您構建應用程序二進制文件時處理。順便說一句,如果你正在爲iPad建設,那麼你正在建設3.2,而不是3.0或4.0。

如果您使用3_2或4_2而不是3_0或4_0它應該工作。

祝你好運。

+0

好吧,我知道它沒有運行,編譯時會有更多的工作。 3_0應該至少在iPad上定義,但對嗎? – 2010-10-17 21:49:22