2012-10-26 6 views
10

Wie überprüfe ich, ob ein Schlüssel auf einem NSDictionary existiert?Cocoa/Objective-C - Überprüfen, ob ein Schlüssel in einem NSDictionary vorhanden ist

Ich weiß, wie man überprüft, ob es etwas Inhalt hat, aber ich möchte sehr, wenn es da ist, weil es dynamisch ist und ich es verhindern muss. Wie in einigen Fällen könnte es einen Schlüssel mit dem "Namen" geben und ist Wert, aber in anderen Fällen könnte es passieren, dass dieses Wertpaar nicht existiert.

Antwort

17

Der einfachste Weg ist:

[dictionary objectForKey:@"key"] != nil 

als Wörterbücher nil für nicht-existente Schlüssel zurückgeben (und Sie können daher keine Null in einem Wörterbuch speichern, für die Sie verwenden NSNull).

Edit: Antwort auf Bradley Antwort auf einen Kommentar

Sie weiter fragen:

Gibt es eine Möglichkeit, wenn dies zu überprüfen: [[[contactDetailsDictionary objectForKey: @ "Profi"] objectForKey: @ "CurrentJob"] objectForKey: @ "Rolle"] existiert? Kein einziger Schlüssel, denn es ist ein wirklich riesiges Wörterbuch, also könnte es in einer anderen Kategorie existieren.

In Objective-C können Sie eine Nachricht an nil senden, es ist kein Fehler und gibt nil, so die einfache Methode erweitert oben einfach schreiben:

[[[contactDetailsDictionary objectForKey:@"professional"] 
           objectForKey:@"CurrentJob"] 
           objectForKey:@"Role"] != nil 

als ob jeder Teil des ist Schlüsselsequenz nicht die LHS existieren gibt nil

+1

Für die verkettete Suche können Sie KVC auch verwenden: '[contactDetailsDictionary valueForKeyPath: @" professional.CurrentJob.Role "]'. –

+0

Es gibt einen kleinen Tippfehler in der ersten Codezeile, der Methodenname ist 'objectForKey', nicht' objectForkey'. – jamix

+0

@jamix - Danke, behoben. – CRD

6

NSDictionary gibt alle Schlüssel als NSArray zurück und verwendet dann containsObject auf dem Array.

NSDictionary* dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"object", @"key"]; 
if ([[dictionary allKeys] containsObject:@"key"]) { 
    NSLog(@"'key' exists."); 
} 
+0

gibt es eine Möglichkeit zu überprüfen, ob dies: [[[contactDetailsDictionary objectForKey: @ "Profi"] objectForKey: @ "CurrentJob"] objectForKey: @ "Rolle"] ] existiert? Kein einziger Schlüssel, denn es ist ein wirklich riesiges Wörterbuch, also könnte es in einer anderen Kategorie existieren. –

+0

Ersetzen Sie 'dictionary' durch einen Aufruf einer Methode, die ein' NSDictionary' zurückgibt. –

+0

Wenn die Methode dasselbe zurückgibt, was ist dann nötig? Vielleicht ist das eine Noob-Frage, aber ich kam von Front End und das Objective C bringt mich langsam um: P –

Verwandte Themen