iPhone, проверьте наличие постоянного

Как вы можете проверить, установлена ​​ли константа во время выполнения? Например, в iOS 4 доступен UIApplicationDidEnterBackgroundNotification, но при работе на iOS 3 он выдает ошибку, если вы попытаетесь его использовать.


person David Beck    schedule 03.07.2010    source источник


Ответы (1)


Вам, вероятно, следует посмотреть этот другой вопрос, который, на мой взгляд, также отвечает на ваш. if (&UIApplicationWillEnterForegroundNotification != NULL) должен быть безопасным для динамических ссылок и сообщать вам, существует ли константа или нет.

person Romain    schedule 03.07.2010
comment
Если вы используете LLVM, вам нужно проделать несколько уловок, чтобы заставить его не отказываться от вашего оператора if. У меня это работает. BOOL backgroundOK = & UIApplicationDidEnterBackgroundNotification! = NULL; if (backgroundOK) {[[NSNotificationCenter defaultCenter] addObserver: селектор: @selector (applicationDidEnterBackground :) имя: UIApplicationDidEnterBackgroundNotification bject: nil]; } - person David Beck; 05.07.2010
comment
Исправлена ​​ли эта ошибка оптимизатора в компиляторе LLVM / Clang? В какой версии? - person Nikita Zhuk; 20.04.2011
comment
Это не ошибка LLVM, а особенность. LLVM оптимизирует операторы без побочных эффектов, и это хорошо. Но для этого типа кода это немного усложняет работу. - person Romain; 21.04.2011
comment
Почему бы не использовать #ifdef? - person Iulian Onofrei; 29.10.2014
comment
@IulianOnofrei, потому что UIApplicationWillEnterForegroundNotification не является макросом ... - person Romain; 03.12.2014