2010-06-26 12 views

Odpowiedz

45

Jasarien jest grubsza poprawne, ale jest podatny na problemy pod LLVM 1.5 gdzie kompilator zoptymalizuje IF-oświadczenie z dala.

Powinieneś także porównywać adres stałej do NULL, a nie nil (nil ma inną semantykę).

Bardziej dokładne rozwiązanie to:

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

Dlaczego nie używać '# ifdef'? –

+1

@lulian #ifdef działa z # define'd makrami https://gccnu.nu.org/onlinedocs/cpp/Ifdef.html oprócz OP zażądał sprawdzenia w czasie wykonywania, którego #ifdef nie zrobi. – Emanuel

29

Sprawdź to wskaźnik na zero, jak odpowiedzieć na to

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

Dzięki, działa świetnie. –

+3

Dodałem odpowiedź z poprawką, która może być interesująca. –

+1

Dlaczego nie tylko 'if (& UIKeyboardBoundsUserInfoKey) {}'? –

Powiązane problemy