2017-05-27 5 views
0

Ich habe Schlüsselwertepaare schon länger diese NSDictionary wieSchlüsselwerte NSDictionary Misses Tasten

NSDictionary *dict = @{key1:value1, key2:value2}; 

wenn Wert1 nicht gefunden, die App stürzt ab. So setzte ich den anderen Weg, es zu tun

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:value1,key1,value2,key2,nil]; 

In diesem Fall, wenn Wert1 nicht gefunden wird, dict nicht weiter gehen und nicht über key2. Was ist die Lösung dafür?

+0

Mögliche Duplikate von [iOS: Warum kann ich NIL nicht auf NSDictionary Wert setzen?] (Https://StackOverflow.com/questions/12008365/ios-why-cant-i-set-nil-to-nsdictionary- Wert) – Nef10

+0

Nein, es ist kein Duplikat dieser Frage. Es ist eine andere Frage und ein anderes Problem. – Swati

Antwort

2

NSDictionary (sowie) können nil nicht speichern, weil sie ein Objekt erwarten. Eine Lösung wäre NSNull zu verwenden oder den Wert überhaupt nicht zu speichern. Im letzteren Fall wird die objectForKey: Methode nil zurückgeben, wenn sie den Wert für den gegebenen Schlüssel nicht finden kann, der möglicherweise gewünscht wird.

Im zweiten Codebeispiel ist das Problem, dass es nicht weiter geht, dass diese Methode eine nil -terminierte Liste erwartet, so dass es nur bei der ersten Null anhält, da es das Ende meint.

Sie können setValue:forKey: verwenden, dies wird nur den Wert für den Schlüssel entfernen, wenn der Wert ist. Siehe here. Es muss also ein veränderbares Array sein und Sie müssen alle Werte eins nach dem anderen durchlaufen.

Eine andere Lösung wäre, jeden Wert mit einer Überprüfung zu schützen, z. wie gezeigt here.

+0

Ich habe gerade ein Beispiel gegeben. In Wirklichkeit gibt es 10-20 Schlüssel, die ich speichere, wie kann ich überprüfen, ob alle null sind. – Swati

+0

Bearbeitete meine Antwort. – Nef10

-1

Ich habe die Lösung

NSMutableDictionary *dict2 = [NSMutableDictionary dictionary]; 
    [dict2 setValue:value1 forKey:key1]; 
    [dict2 setValue:value2 forKey:key2]; 
    [dict2 setValue:value3 forKey:key3]; 

    NSLog(@"dict2 - %@",dict2); 

wirkt wie ein Zauber gefunden !!!

+0

Dies ist, was ich in meine Antwort bearbeitet, nachdem Sie den Kommentar hinzugefügt :) – Nef10

+0

Ohh .. Ich sehe das .. Danke @ Nef10 – Swati

+0

@ Nef10 Antwort macht Sinn. Sie sollten die Antwort akzeptieren. – Alok