Check if constant is defined at runtime in Obj-C
To, for example, access variables in a NSDictionary
Cocoa frameworks often define keys, such as UIKeyboardBoundsUserInfoKey
. How can I check if a key is defined at 开发者_运维问答runtime? I found examples on how to check for classes and functions, but not for constants.
Jasarien's answer is roughly correct, but is prone to issues under LLVM 1.5 where the compiler will optimise the if-statement away.
You should also be comparing the address of the constant to NULL
, rather than nil
(nil
has different semantics).
A more accurate solution is this:
BOOL isKeyboardBoundsKeyAvailable = (&UIKeyboardBoundsUserInfoKey != NULL);
if (isKeyboardBoundsKeyAvailable) {
// UIKeyboardBoundsUserInfoKey defined
}
Check it's pointer against nil, like this
if (&UIKeyboardBoundsUserInfoKey != nil)
{
//Key exists
}
精彩评论