NSCache:尝试访问缓存项时始终获得"不符合键值编码"

Rya*_*ick 8 cocoa objective-c ios nscache

我正在尝试使用NSCache将PNG存储为NSData.每当我尝试从缓存中取出一个缓存,无论缓存是否为空,我得到:

2012-10-26 09:49:28.860 SledMap [55917:11503] *由于未捕获的异常'NSUnknownKeyException'终止应用程序,原因:'[valueForUndefinedKey:]:此类不是密钥值0_0_5的编码兼容.

如果我完全保留代码,但将NSCache更改为NSMutableDictionary,它可以正常工作.

我宣布我的缓存:

@property (nonatomic, strong) NSCache *tileCache;
Run Code Online (Sandbox Code Playgroud)

分配它(在viewDidLoad中):

self.tileCache = [[NSCache alloc] init];
self.tileCache.delegate = self;
Run Code Online (Sandbox Code Playgroud)

添加内容到缓存:

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

然后当我把它拿回来时,我得到了上述错误.

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

如果它是空的,我希望它只返回nil,这就是当我将self.tileCache设为NSMutableDictionary而不是NSCache时会发生的事情.此外,在调试区域,它说:

tile = NSData * 0x0134dc59 <Variable is not NSData>
Run Code Online (Sandbox Code Playgroud)

如果我传入NSString,它会做同样的事情,并且变量不是NSString.

另外,我可以硬编码key为"A",并尝试以相同的结果再次访问为"A".

有任何想法吗?

tc.*_*tc. 21

-valueForKey:是一种KVC方法; 使用-objectForKey: