2010-10-07 11 views
24

Ciao sto avendo un NSdictionary in cui sto aggiungendo una matrice con chiave "paesi". Ora prendo il valore di questo dizionario in array e ordiniamo l'array in ordine alpahbatical. Ora voglio aggiungere questo array nel mio dizionario (cioè voglio aggiornare il mio dizionario con il nuovo array ordinato e rimuovere il vecchio array da esso). ....... come fare questocome rimuovere l'oggetto da NSDictionary

il mio codice è il seguente

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); 

Qui voglio rimuovere il countriesToLiveInArray e sostituirlo con SortedArray con lo stesso valore di chiave cioè Paesi Grazie in anticipo.

+0

Perché n o ordina semplicemente l'array prima di aggiungerlo al dizionario? –

+2

Usa objectForKey: not valueForKey: valueForKEy: tecnicamente è per KVC ed è leggermente più lento. – JeremyP

risposta

59

Per prima cosa è necessario utilizzare uno NSMutableDictionary e inserire questo codice:

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

Non è necessario rimuovere l'oggetto precedente per la chiave. -setObject: forKey: rilascia automaticamente l'oggetto precedente, se chiamato su un kety che esiste già. – JeremyP

5

Prima di tutto rendere la vostra NSDictionary a NSMutableDictionary & poi scrivere la seguente riga di codice

[countriesToLiveInDict removeObjectForKey:@"Countries"]; 

Questo sarà sicuramente risolvere il problema.

+2

L'impostazione 'countriesToLiveInDict =' è necessaria? – DCurro

+0

Non farlo, la documentazione afferma '- [NSMutableDictionary removeObjectForKey:]' restituisce 'void'. Vedere: [- (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 non può rimuovere qualsiasi cosa, si prega di utilizzare NSMutableDictionary, in questo modo:

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

per Swift 3 come @MathieuF rispose In primo luogo è necessario utilizzare un NSMutableDictionary e inserire questo codice:

countriesToLiveInDict.removeObject(forKey: "Countries") 

invio la mia risposta poiché cercavo la stessa domanda e mi sono ispirato a @MathieuF