2010-06-26 7 views

risposta

45

di Jasarien è più o meno corretto, ma è soggetto a problemi sotto LLVM 1.5 dove il compilatore di ottimizzare il se-dichiarazione distanza.

Si dovrebbe anche confrontare l'indirizzo della costante a NULL, anziché nil (nil ha semantica diversa).

Una soluzione più accurata è questo:

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

Perché non utilizzare '# ifdef'? –

+1

@lulian #ifdef funziona con # define'd macros https://gcc.gnu.org/onlinedocs/cpp/Ifdef.html inoltre OP chiede un controllo runtime, che #ifdef non farà. – Emanuel

29

Controllare che sia puntatore contro nil, come risposta questa

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

Grazie, funziona alla grande. –

+3

Ho aggiunto una risposta con una correzione che potrebbe essere di interesse. –

+1

Perché non solo 'if (& UIKeyboardBoundsUserInfoKey) {}'? –

Problemi correlati