检查Obj-C中是否在运行时定义了常量

时间:2010-06-26 00:05:52

标签: iphone objective-c cocoa cocoa-touch macos

例如,在NSDictionary Cocoa框架中访问变量通常会定义密钥,例如UIKeyboardBoundsUserInfoKey。如何检查是否在运行时定义了键?我找到了关于如何检查类和函数的示例,但没有找到常量。

2 个答案:

答案 0 :(得分:46)

Jasarien的答案大致正确,但在LLVM 1.5下容易出现问题,编译器将优化if语句。

您还应该将常量的地址与NULL进行比较,而不是nilnil具有不同的语义)。

更准确的解决方案是:

BOOL isKeyboardBoundsKeyAvailable = (&UIKeyboardBoundsUserInfoKey != NULL);
if (isKeyboardBoundsKeyAvailable) {
  // UIKeyboardBoundsUserInfoKey defined
}

答案 1 :(得分:30)

检查它的指针是否为nil,就像这样

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