Recibo una excepción después de intentar eliminar un objeto de un NSMutableDictionary. El código relevante sigue. La 'configuración' se pasa al método y puede ser un NSDictionary o un NSMutableDictionary.Eliminar un objeto de un diccionario mutable arroja una excepción
NSMutableDictionary *mutableSettings = nil;
if ([settings isKindOfClass:[NSMutableDictionary class]])
mutableSettings = (NSMutableDictionary *)settings;
else
mutableSettings = [[[NSMutableDictionary alloc] initWithDictionary:settings] autorelease];
[mutableSettings removeObjectForKey:@"akey"];
Esto bloquea con
* Terminación de aplicación debido a excepción no detectada 'NSInternalInconsistencyException', razón: '- [__ NSCFDictionary removeObjectForKey:]: Método mutando enviado al objeto inmutable'
¿Qué pasa con esto? Gracias.
Además, como los guiones bajos implican, '__NSCFDictionary' es una clase privada. No es necesariamente la única clase de diccionario, y no se garantiza que permanezca por siempre. Más relevante, es una subclase de NSMutableDictionary, por lo que * cada * diccionario (que es una instancia de '__NSCFDictionary') es una especie de NSMutableDictionary. Todas estas cosas significan que no hay una forma confiable de decir si un diccionario o cualquier otro objeto plist es mutable o no. –