Eliminar un object de un dictionary mutable arroja una exception

Recibo una exception después de intentar eliminar un object de un NSMutableDictionary. El código relevante sigue. La "configuration" se pasa al método y puede ser un NSDictionary o un NSMutableDictionary.

NSMutableDictionary *mutableSettings = nil; if ([settings isKindOfClass:[NSMutableDictionary class]]) mutableSettings = (NSMutableDictionary *)settings; else mutableSettings = [[[NSMutableDictionary alloc] initWithDictionary:settings] autorelease]; [mutableSettings removeObjectForKey:@"akey"]; 

Esto se cuelga con

* Aplicación de terminación debido a la exception no detectada 'NSInternalInconsistencyException', razón: '- [__ NSCFDictionary removeObjectForKey:]: método de mutación enviado a object inmutable'

¿Cuál es incorrecto con esto? Gracias.

El problema aquí es que tanto NSDictionary como NSMutableDictionary devuelven __NSCFDictionary como su class , debido al hecho de que NSDictionary es un clúster de class.

Creo que solo tendrás que hacer una copy mutable del dictionary de settings ya sea que sea mutable o no.

 NSMutableDictionary *mutableSettings = [settings mutableCopy];