Будет ли работать #if __IPHONE_4_0 на iPad? - PullRequest
3 голосов
/ 18 октября 2010

Будет ли эта проверка работать на iPad и iPhone? Я думаю, я просто запутался в использовании термина «iPhone» на iPad. Есть ли что-то еще, что я должен проверить для версии iPad OS, или макрос ссылается на общую версию iOS.

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

Ответы [ 2 ]

8 голосов
/ 18 октября 2010

Проблема с __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

чтобы обойти ошибку, упомянутую в комментариях к " Как настроить таргетинг на определенную версию iPhone? " __IPHONE_OS_VERSION_MAX_ALLOWED также может быть полезен, в некоторых случаях.

И, да, не имеет значения, на каком устройстве будет работать приложение. Эти константы определяются компилятором и не существуют на устройствах. После запуска препроцессора макросы не остаются. Хотя в самих устройствах есть различия, iPhone и iPad работают под управлением iOS, и это именно то, на что вы нацелены.

1 голос
/ 18 октября 2010

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

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

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...