Subsorting NSMutableDictionary

Estoy intentando implementar una subclass de NSMutableDictionary que devuelve nil en lugar de lanzar una NSUndefinedKeyException cuando la key no está presente en el Diccionario.

Sin embargo, cuando trato de agregar objects a mi dictionary, obtengo

[NSMutableDictionary setObject:forKey:]: method only defined for abstract class 

NilDictionary.h

 @interface NilDictionary : NSMutableDictionary { } @end 

NilDctionary.m

 @implementation NilDictionary - (id)valueForUndefinedKey:(NSString *)key { return nil; } @end 

¿Realmente tengo que implementar todos los methods de NSMutableDictionary nuevamente en mi subclass o hay alguna otra class que debería subclass?

Aclaración : Mi problema original fue que no pude leer la documentation correctamente.

Si necesita subclass NSMutableDictionary, consulte la respuesta correcta. Si desea un dictionary que devuelve nil cuando su key no está presente, NSMutableDictionary ya lo hace.

NSMutableDictionary Class Reference dice:

En una subclass, debes anular ambos de sus methods primitivos:

1. setObject: forKey:
2. removeObjectForKey:

También debe anular los methods primitivos de la class NSDictionary .


NSDictionary Class Reference dice:

Si necesita subclass NSDictionary , debe tener en count que está representado por un Class cluster por lo tanto, existen varios methods primitivos en los que los methods se basan conceptualmente:

1. contar
2. objectForKey:
3. keyEnumerator
4. initWithObjects: forKeys: count:

En una subclass, debe anular todos estos methods.

NSDictionary's otros methods de NSDictionary's operan invocando uno o más de estos primitivos. Los methods no primitivos proporcionan forms convenientes de acceder a varias inputs a la vez.


Parece que debe anular todos estos seis methods para que su subclass NSMutableDictionary funcione perfectamente.

Este es tu problema. NSDictionary (y su contraparte mutable) es parte de un clúster de class (lea más sobre ellos aquí , bajo el encabezado 'Clúster de class'), y no debe subclass porque causa problemas como lo que ha mencionado (lea las notas de subsorting en la reference de la class NSDictionary ). Sea lo que sea lo que necesite hacer, tendrá una manera de extender las classs que desea usar para hacer lo que quiere hacer. Por ejemplo, el código anterior puede ubicarse fácilmente en una categoría (lea más sobre las categorías aquí ).

¿Estás seguro de que no obtienes la exception al pasar "nil" para una CLAVE (no un valor)?