2010-10-07 19 views
24

Witam Mam NSdictionary, w którym dodaję tablicę z kluczem "kraje". Teraz biorę wartość tego słownika do tablicy i sortuję tablicę w porządku alpahbatical. Teraz chcę dodać tę tablicę do mojego słownika (chcę zaktualizować słownik o nową posortowaną tablicę i usunąć z niej starą tablicę). ....... jak to zrobićJak usunąć obiekt z NSDictionary

Mój kod wygląda następująco

NSArray *countriesToLiveInArray = [NSArray arrayWithObjects:@"Iceland", @"Greenland", @"Switzerland", @"Norway", @"New Zealand", @"Greece", @"Italy", @"Ireland", nil]; 
NSDictionary *countriesToLiveInDict = [NSDictionary dictionaryWithObject:countriesToLiveInArray forKey:@"Countries"]; 


NSArray *tmpary = [countriesToLiveInDict valueForKey:@"Countries"]; 
NSLog(@"ary value is %@",ary); 
NSArray *sortedArray = [tmpary sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 
NSLog(@"sortedArray is %@",sortedArray); 

Tutaj chcę usunąć countriesToLiveInArray i zastąpić go sortedArray z samej wartości klucza tj Państwa góry dziękuję.

+0

Dlaczego n ot po prostu posortuj tablicę przed dodaniem jej do słownika? –

+2

Użyj objectForKey: not valueForKey: valueForKEy: jest technicznie dla KVC i jest bardzo nieznacznie wolniejszy. – JeremyP

Odpowiedz

59

Najpierw należy użyć NSMutableDictionary i wpisać następujący kod:

[countriesToLiveInDict removeObjectForKey:@"Countries"]; 
[countriesToLiveInDict setObject:sortedArray forKey:@"Countries"]; 
+19

Nie trzeba usuwać poprzedniego obiektu dla klucza. -setObject: forKey: automatycznie zwalnia poprzedni obiekt, jeśli zostanie wywołany kety, który już istnieje. – JeremyP

5

Przede wszystkim dokonać NSDictionary do NSMutableDictionary & następnie wpisz następujący wiersz kodu

[countriesToLiveInDict removeObjectForKey:@"Countries"]; 

To z pewnością rozwiąże Twój problem.

+2

Czy ustawienie 'countriesToLiveInDict =' jest konieczne? – DCurro

+0

Nie rób tego, dokumentacja stwierdza '- [NSMutableDictionary removeObjectForKey:]' zwraca 'void'. Zobacz: [- (void) removeObjectForKey: (KeyType) aKey] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSMutableDictionary_Class/#//apple_ref/occ/instm/NSMutableDictionary/removeObjectForKey :) – Tyr0

1

NSDictionary nie można usunąć niczego, skorzystaj NSMutableDictionary, tak:

NSMutableDictionary *countriesToLiveInDict = [NSMutableDictionary dictionaryWithObject:countriesToLiveInArray forKey:@"Countries"]; 
0

dla Swift 3 jak @MathieuF odebrał najpierw trzeba użyć NSMutableDictionary i umieścić ten kod:

countriesToLiveInDict.removeObject(forKey: "Countries") 

Podaj moją odpowiedź, gdy szukałem tego samego pytania i zainspirowało mnie @MathieuF