InitWithDictionary hace que se cambie el NSMutableDictionary original
Frecuentes
Visto 264 equipos
-1
Originalmente tengo un solo NSMutableDictionary. Luego inicializo otro NSMutableDictionary usando:
self.originalDict = [[NSMutableDictionary alloc] initWithDictionary:self.newDict];
Ambos tienen NSStrings como claves y NSMutableArray como valores.
Cuando más tarde hago: ...
NSArray *keys = [self.newDict allKeys];
for(NSString *key in keys){
[[self.newDict objectForKey:key] filterUsingPredicate:[self predicateForSearchString:searchString]];
*/
}
Esto hizo que mi diccionario original también cambiara. ¿Qué estoy haciendo mal? ¿Es tal vez otra razón?
1 Respuestas
0
Prueba esto:
self.originalDict = [[NSMutableDictionary alloc] initWithDictionary:self.theDict copyItems:YES];
Respondido 07 Oct 14, 14:10
cuando agrego copyItems obtengo la terminación: "-[__NSArrayI filterUsingPredicate:]: selector no reconocido enviado a la instancia" por alguna razón - ole-m
lo que significa que [self.newDict objectForKey:key] ahora es un NSArray en lugar de NSMutableArray, ¿cuál es el contenido de [self.newDict objectForKey:key]? intente cerrar la sesión. - charlatán
Puede usar filteredArrayUsingPredicate en NSArray, por lo que el error desaparecerá: charlatán
Sí, cuando cierro la sesión veo que es un NSArray. Sin embargo, quiero actualizar esa entrada en particular con el nuevo filteredArray. Cuando uso [[self.newDict objectForKey:key] setObject:filteredArray forKey:key] obtengo: "NSInvalidArgumentException', razón: '-[__NSArrayI setObject:forKey:]: selector no reconocido enviado a la instancia" - ole-m
use [self.newDict setObject:currentArray forKey:key] - charlatán
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas ios objective-c nsmutabledictionary or haz tu propia pregunta.
pruebe el método initWithDictionary:copyItems: - kabarga
cuando agrego copyItems obtengo la terminación: "-[__NSArrayI filterUsingPredicate:]: selector no reconocido enviado a la instancia" - Ole-M
ambos NSMutableDictionary se declaran (no atómicos, fuertes) por cierto - Ole-M
intente usar _newDict en lugar de self.newDict. probablemente tenga los métodos setNewDict donde anula el originalDict cada vez. Lo acabo de probar y me funciona bien. - kabarga