Wie kann ich überprüfen, ob dies vorhanden ist?:
[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"]
Ich möchte wissen, ob dieser Schlüssel existiert oder nicht. Wie kann ich das machen?
Vielen Dank :)
BEARBEITEN: dataArray enthält Objekte. Und diese Objekte sind NSDictionaries.
ios
objective-c
iphone
nsdictionary
cocos2dbeginner
quelle
quelle
-valueForKey:
anstelle von verwenden-objectForKey:
? Ersteres wird bei der Schlüsselwertcodierung verwendet und ist etwas langsamer als letzteres.Antworten:
Ich gehe davon aus, dass dies
[dataArray objectAtIndex:indexPathSet.row]
eine RückgabeNSDictionary
ist. In diesem Fall können Sie einfach das Ergebnis vonvalueForKey
gegen prüfennil.
Zum Beispiel:
if ([[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) { // The key existed... } else { // No joy... }
quelle
Ich weiß also, dass Sie bereits eine Antwort ausgewählt haben, aber ich fand dies als Kategorie für ziemlich nützlich
NSDictionary
. Mit all diesen unterschiedlichen Antworten beginnen Sie an diesem Punkt mit der Effizienz. Meh ... 6 von 1 ...- (BOOL)containsKey: (NSString *)key { BOOL retVal = 0; NSArray *allKeys = [self allKeys]; retVal = [allKeys containsObject:key]; return retVal; }
quelle
Überprüfen Sie, ob es gleich Null ist:
if ([[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) { // SetEntries exists in this dict } else { // No SetEntries in this dict }
quelle
nil
in einem NSDictionary befinden. Um Null darzustellen, können Sie NSNull verwenden.Dies funktioniert auch mit Objective-C-Literalen mit der folgenden Syntax:
NSDictionary *dict = @{ @"key1" : @"value1", @"key2" : @"value2" }; if (dict[@"key2"]) NSLog(@"Exists"); else NSLog(@"Does not exist");
quelle
if ((NSNull *)[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) { // SetEntries exists in this dict } else { // No SetEntries in this dict }
Das ist die richtige Antwort.
quelle
Versuche dies:
if ([dict objectForKey:@"bla"]) { // use obj } else { // Do something else like create the object }
quelle
objectForKey:
anstelle einer anderen Methode zu verwenden? Warum müssen Sie nicht explizit nach einem Wert suchen? Zumindest würde die Verwendung des in der Frage angegebenen Codebeispiels die Verknüpfung Ihres Beispiels mit der ursprünglichen Frage erleichtern.Dieser macht das gleiche, aber mit weniger Code:
if (dataArray[indexPathSet.row][@"SetEntries"] != nil) { /* the key exists */ } else { /* the key doesn't exist */ }
quelle
Das Wörterbuch überprüfen enthält einen beliebigen Wert. Ich bevorzuge [dic allKeys] .count> 0 zu überprüfen.
quelle
Verwenden Sie die
(unsigned long)
Option:if ( (unsigned long)[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] ) { // Key exist; }else{ // Key not exist; };
quelle