Проверьте, определена ли постоянная во время выполнения в Obj-C - PullRequest
20 голосов
/ 26 июня 2010

Например, для доступа к переменным в NSDictionary структурах Какао часто определяют ключи, такие как UIKeyboardBoundsUserInfoKey.Как я могу проверить, определен ли ключ во время выполнения?Я нашел примеры того, как проверять классы и функции, но не константы.

Ответы [ 2 ]

46 голосов
/ 11 марта 2011

Ответ Jasarien является приблизительно правильным, но он склонен к проблемам в LLVM 1.5, когда компилятор будет оптимизировать оператор if.

Вы также должны сравнивать адрес константы с NULL вместо nil (nil имеет другую семантику).

Более точное решение таково:

BOOL isKeyboardBoundsKeyAvailable = (&UIKeyboardBoundsUserInfoKey != NULL);
if (isKeyboardBoundsKeyAvailable) {
  // UIKeyboardBoundsUserInfoKey defined
}
30 голосов
/ 26 июня 2010

Проверьте это указатель на ноль, как это

if (&UIKeyboardBoundsUserInfoKey != nil)
{
    //Key exists
}
...