Проблемы с директивой препроцессора Objective-C

Я реализовал этот код для определения моих констант:

#ifdef UI_USER_INTERFACE_IDIOM
#define IS_IPAD() (UI_USER_INTERFACE_IDIOM == UIUserInterfaceIdiomPad)
#else
#define IS_IPAD() (false)
#endif

#if (IS_IPAD)
CGFloat const scrollSizeWidth = 768.0f;
CGFloat const scrollSizeHeight = 1004.0f;
#else
CGFloat const scrollSizeWidth = 320.0f;
CGFloat const scrollSizeHeight = 460.0f;
#endif

Но он всегда отображает 320.0f и 460.0f для моих переменных.

ОБНОВЛЕНИЕ: как пользователь k3a обнаружил, что UI_USER_INTERFACE_IDIOM не работает для iOS 8.3, потому что это больше не определение, а статическая встроенная функция.

Проверьте также этот ответ: ссылка


person Matrosov Alexander    schedule 18.07.2012    source источник
comment
#ifdef UI_USER_INTERFACE_IDIOM не работает в Xcode 6.3+, поскольку он больше не определяется препроцессором   -  person k3a    schedule 26.04.2015
comment
@k3a, о боже, правда? я еще не проверял   -  person Matrosov Alexander    schedule 26.04.2015
comment
Ага. Я заметил это, поскольку мое приложение загружало перья iPhone при компиляции с Xcode 6.3+. Вот новое определение этого символа: static inline UIUserInterfaceIdiom UI_USER_INTERFACE_IDIOM() { return ([[UIDevice currentDevice] responsesToSelector:@selector(userInterfaceIdiom)] ? [[UIDevice currentDevice] userInterfaceIdiom] : UIUserInterfaceIdiomPhone); }   -  person k3a    schedule 26.04.2015
comment
@k3a да, я думаю, решение, которое мы можем использовать [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)   -  person Matrosov Alexander    schedule 28.04.2015
comment
да, но исходная часть кода #ifdef UI_USER_INTERFACE_IDIOM теперь не работает, поскольку UI_USER_INTERFACE_IDIOM - это не определение, а функция;) упомянул об этом, чтобы люди знали...   -  person k3a    schedule 28.04.2015
comment
@ k3a, да, добавил это как обновление, если кто-нибудь проверит мой вопрос, я думаю, это будет полезно. Спасибо!   -  person Matrosov Alexander    schedule 28.04.2015


Ответы (2)


Сдача:

#ifdef UI_USER_INTERFACE_IDIOM
#define IS_IPAD() (UI_USER_INTERFACE_IDIOM == UIUserInterfaceIdiomPad)
#else
#define IS_IPAD() (false)
#endif

to

#ifdef UI_USER_INTERFACE_IDIOM
#define IS_IPAD (UI_USER_INTERFACE_IDIOM == UIUserInterfaceIdiomPad)
#else
#define IS_IPAD (false)
#endif
person Paul R    schedule 18.07.2012
comment
извините за работу, но теперь я получаю только 768.0f 1004.0f; я имею в виду в любое время - person Matrosov Alexander; 19.07.2012

Если UIUserInterfaceIdiomPad не является символом препроцессора, то его нельзя использовать в условных выражениях препроцессора.

person Some programmer dude    schedule 18.07.2012