2010-10-07 15 views
24

Hola, estoy teniendo un NSdiccionario en el que estoy agregando una matriz con "países" clave. Ahora tomo el valor de este diccionario en una matriz y clasifico la matriz en orden alpahbatical. Ahora quiero agregar esta matriz a mi Diccionario (es decir, quiero actualizar mi diccionario con la nueva matriz ordenada y eliminar la matriz anterior de ella). ....... cómo hacer estocómo quitar el objeto de NSDictionary

Mi código es el siguiente

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

Aquí quiero quitar el countriesToLiveInArray y reemplazarlo con sortedArray con mismo valor de clave es decir, países Gracias de antemano.

+0

Why n ¿O simplemente ordena la matriz antes de agregarla al diccionario? –

+2

Use objectForKey: not valueForKey: valueForKEy: es técnicamente para KVC y es un poco más lento. – JeremyP

Respuesta

59

Primero necesitas usar un NSMutableDictionary y poner este código:

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

No es necesario que elimine el objeto anterior para la clave. -setObject: forKey: libera automáticamente el objeto anterior, si se llama a un kety que ya existe. – JeremyP

5

En primer lugar hacer su NSDictionary a NSMutableDictionary & a continuación, escribir la siguiente línea de código

[countriesToLiveInDict removeObjectForKey:@"Countries"]; 

esto definitivamente va a resolver su problema.

+2

¿Es necesario establecer 'countriesToLiveInDict ='? – DCurro

+0

No haga esto, la documentación indica '- [NSMutableDictionary removeObjectForKey:]' devuelve 'void'. Ver: [- (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 no se puede eliminar cualquier cosa, por favor utilice NSMutableDictionary, así:

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

de Swift 3 como @MathieuF contestó primer lugar es necesario utilizar un NSMutableDictionary y poner este código:

countriesToLiveInDict.removeObject(forKey: "Countries") 

publico mi respuesta porque estaba buscando la misma pregunta y me inspiré en @MathieuF