NSCache: Obtiene siempre "no cumple con la encoding de valor key" al intentar acceder al elemento almacenado en caching

Estoy intentando usar NSCache para almacenar PNG como NSData. Cada vez que bash get una copy de security del caching, ya sea que el caching esté vacío o no, obtengo:

2012-10-26 09: 49: 28.860 SledMap [55917: 11503] * Aplicación de terminación debido a la exception no detectada 'NSUnknownKeyException', motivo: '[valueForUndefinedKey:]: esta class no cumple con la encoding de valor key para la key 0_0_5.'

Si dejo el código exactamente como está, pero cambio NSCache a NSMutableDictionary, funciona bien.

Declaro mi caching:

@property (nonatomic, strong) NSCache *tileCache; 

Asignarlo (en viewDidLoad):

 self.tileCache = [[NSCache alloc] init]; self.tileCache.delegate = self; 

Agregue algo al caching:

 NSString *key = [NSString stringWithFormat:@"%i_%i_%i",x,y,endLevel]; NSData *pngData = [NSData dataWithData:UIImagePNGRepresentation(image)]; [self.tileCache setObject:pngData forKey:key]; 

Y luego, cuando recupero, obtengo el error anterior.

 NSString *key = [NSString stringWithFormat:@"%i_%i_%i",x,y,endLevel]; NSData *tile = [self.tileCache valueForKey:key]; //This is the line it crashes on 

Si estaba vacío, esperaría que simplemente devolviera nil, que es lo que ocurre cuando hago self.tileCache un NSMutableDictionary en lugar de un NSCache. Además, en el área de debugging, dice:

 tile = NSData * 0x0134dc59 <Variable is not NSData> 

Si paso un NSString, hace lo mismo y dice que la variable no es NSString.

Además, puedo usar la key código duro para ser "A" e intentar acceder nuevamente como "A" con los mismos resultados.

¿Algunas ideas?

-valueForKey: es un método KVC; use -objectForKey:

No creo que el problema sea el NSData, creo que podría ser con su key. Eche un vistazo de cerca a ese stringWithFormat: probablemente use% d en lugar de% i si ambos son integers, porque% d cumple 32 bits. Si son flotantes, deberías usar% f.