2010-10-17 5 views
3

Будет ли эта проверка работать на iPad, а также на iPhone? Наверное, я просто смущен тем, что использовал термин «iPhone» на iPad. Есть ли что-то еще, что мне нужно для проверки версии iPad OS, или макрос ссылается на общую версию 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

Спасибо, что именно так я и искал. –

1

Код, который вы опубликовали, является директивой для компилятора. Это означает, что он не будет работать на iPad или iPhone. Он обрабатывается при создании бинарного файла приложения. Кстати, если вы строите iPad, то вы строите 3.2, а не 3.0 или 4.0.

Если вы используете 3_2 или 4_2 вместо 3_0 или 4_0, он должен работать.

Удачи.

+0

Хорошо, да, я понимаю, что он не запускается, больше он будет работать при компиляции. 3_0 должен быть хотя бы определен на iPad, правда? –

Смежные вопросы