2012-10-26 16 views
10

Jak sprawdzić, czy klucz istnieje na NSDictionary?Cocoa/Objective-C - Sprawdź, czy istnieje klucz NSDictionary

Wiem, jak sprawdzić, czy ma jakieś treści, ale chcę bardzo, jeśli jest, ponieważ jest dynamiczny i muszę temu zapobiec. Tak jak w niektórych przypadkach może się zdarzyć, że klucz ma "nazwę" i jest wartością, ale w innych przypadkach może się zdarzyć, że ta para wartości nie istnieje.

Odpowiedz

17

Najprostszym sposobem jest:

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

jak słowniki powrócić nil dla kluczy nieistniejących (i nie można zatem zapisać nil w słowniku, za skorzystanie NSNull).

Edycja: Odpowiedź na komentarz na odpowiedź Bradleya

można dodatkowo zapytać:

Czy istnieje sposób, aby sprawdzić, czy w ten sposób: [[[contactDetailsDictionary objectForKey: @ "profesjonalnego"] objectForKey: @ "CurrentJob"] objectForKey: @ "Role"] istnieje? Ani jednego klucza, ponieważ jest to naprawdę wielki słownik, więc mógłby istnieć w innej kategorii.

w Objective-C można wysłać wiadomość do nil, to nie jest błąd i powraca nil, więc rozszerzenie prosty sposób wyżej po prostu napisać:

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

jakby dowolną część key-sekwencja nie istnieje LHS zwraca nil

+1

Dla powiązanego wyszukiwania możesz również użyć KVC: '[contactDetailsDictionary valueForKeyPath: @" professional.CurrentJob.Role "]'. –

+0

W pierwszej linii kodu występuje mała literówka, nazwa metody to 'objectForKey', a nie' objectForkey'. – jamix

+0

@jamix - Dzięki, naprawione. – CRD

6

NSDictionary zwraca wszystkie klucze jako NSArray, a następnie używa containsObject w tablicy.

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

Czy istnieje sposób, aby sprawdzić, czy w ten sposób: [[[contactDetailsDictionary objectForKey: @ "profesjonalnego"] objectForKey: @ "CurrentJob"] objectForKey: @ "Rola"] ] istnieje? Ani jednego klucza, ponieważ jest to naprawdę wielki słownik, więc mógłby istnieć w innej kategorii. –

+0

Zastąp symbol 'słownik' wywołaniem metody zwracającej' NSDictionary'. –

+0

Jeśli metoda zwraca to samo, jaka jest tego potrzeba? Może to pytanie typu noob, ale przyszedłem z Front Endu i ten Cel C powoli mnie zabija: P –