我正在尝试使用NSCACHE将PNG存储为NSDATA。每当我尝试从缓存中撤回一个,无论缓存是否为空,我都会得到:
2012-10-26 09:49:28.860 sledmap [55917:11503] *终止App,由于未知的例外'nsunknownekeyexception'密钥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
如果它是空的,我希望它只能返回零,这就是当我制作self。另外,在调试区域,它说:
tile = NSData * 0x0134dc59 <Variable is not NSData>
如果我通过NSSTRING,它可以做同样的事情,并说变量不是NSSTRING。
另外,我可以将key
硬代码为" A",并尝试以相同结果的" A"再次访问它。
有什么想法?
-valueForKey:
是KVC方法;使用-objectForKey:
我不认为问题是NSDATA,我认为这可能与您的钥匙有关。仔细观察该字符串WithFormat-如果它们都是整数,则可能应该使用%d而不是%i,因为%d符合32位。如果它们是浮子,则应使用%f。