InitWithDictionary hace que se cambie el NSMutableDictionary original

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?

preguntado Oct 07 '14, 14:10

pruebe el método initWithDictionary:copyItems: -

cuando agrego copyItems obtengo la terminación: "-[__NSArrayI filterUsingPredicate:]: selector no reconocido enviado a la instancia" -

ambos NSMutableDictionary se declaran (no atómicos, fuertes) por cierto -

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. -

1 Respuestas

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 or haz tu propia pregunta.