我试图使用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;
分配它(在viewDidLoad中):
self.tileCache = [[NSCache alloc] init];
self.tileCache.delegate = self;
向缓存中添加内容:
NSString *key = [NSString stringWithFormat:@"%i_%i_%i",x,y,endLevel];
NSData *pngData = [NSData dataWithData:UIImagePNGRepresentation(image)];
[self.tileCache setObject:pngData forKey:key];
然后当我把它拿回来时,我得到了上述错误。
NSString *key = [NSString stringWithFormat:@"%i_%i_%i",x,y,endLevel];
NSData *tile = [self.tileCache valueForKey:key]; //This is the line it crashes on
如果它是空的,我希望它只返回nil,这就是当我将self.tileCache设为NSMutableDictionary而不是NSCache时会发生的事情。此外,在调试区域中,它说:
tile = NSData * 0x0134dc59 <Variable is not NSData>
如果我传入一个NSString,它会做同样的事情,并且变量不是NSString。
另外,我可以硬编码key
成为&#34; A&#34;并尝试再次访问它&#34; A&#34;结果相同。
有什么想法吗?
答案 0 :(得分:20)
-valueForKey:
是一种KVC方法;使用-objectForKey:
答案 1 :(得分:-1)
我不认为问题是NSData,我认为它可能与您的密钥有关。仔细看看stringWithFormat - 如果它们都是整数,你应该使用%d而不是%i,因为%d符合32位。如果它们是浮动的,你应该使用%f。