2010-06-26 11 views
20

Um zum Beispiel den Zugriff Variablen in einem NSDictionary Cocoa Frameworks oft Schlüssel, wie UIKeyboardBoundsUserInfoKey definieren. Wie kann ich prüfen, ob zur Laufzeit ein Schlüssel definiert ist? Ich habe Beispiele gefunden, wie man nach Klassen und Funktionen sucht, aber nicht nach Konstanten.Prüfen, ob konstant wird zur Laufzeit in Obj-C definiert

Antwort

45

Antwort Jasarien das ist ungefähr richtig, aber ist anfällig für Probleme unter LLVM 1.5, wo der Compiler die if-Anweisung entfernt werden optimiert.

Sie sollten auch die Adresse der Konstante mit NULL vergleichen, anstatt nil (nil hat andere Semantik).

Eine genauere Lösung ist dies:

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

Warum mit '# ifdef' nicht? –

+1

@lulian #ifdef arbeitet mit # define'd Makros https://gcc.gnu.org/onlinedocs/cpp/Ifdef.html neben OP für eine Laufzeitprüfung gefragt, die #ifdef nicht tun. – Emanuel

29

prüfen ist es Zeiger gegen null, wie dieses

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

Danke, funktioniert gut. –

+3

Ich habe eine Antwort mit einer Korrektur hinzugefügt, die von Interesse sein könnte. –

+1

Warum nicht einfach 'if (& UIKeyboardBoundsUserInfoKey) {}'? –

Verwandte Themen