2010-06-26 31 views

Respuesta

45

de Jasarien es más o menos correcta, pero es propenso a problemas menores de LLVM 1.5, donde el compilador optimizar la sentencia if distancia.

También debería estar comparando la dirección de la constante con NULL, en lugar de nil (nil tiene una semántica diferente).

Una solución más precisa es la siguiente:

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

¿Por qué no usar '# ifdef'? –

+1

@lulian #ifdef funciona con # macros definidas https://gcc.gnu.org/onlinedocs/cpp/Ifdef.html además de OP pidió un control en tiempo de ejecución, que #ifdef no hará. – Emanuel

29

Compruebe que es puntero nulo en contra, como respuesta este

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

Gracias, funciona muy bien. –

+3

Agregué una respuesta con una corrección que podría ser de interés. –

+1

¿Por qué no simplemente 'if (& UIKeyboardBoundsUserInfoKey) {}'? –

Cuestiones relacionadas