我试图使用NSCache将PNG存储为NSData。每当我试图从缓存中取出一个缓存时,无论缓存是否为空,我都会得到:
2012年10月26日09:49:28.860 SledMap55917:11503 *终止应用程序由于非正常异常'NSUnknownKeyException',原因:‘valueForUndefinedKey::这个类不符合键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.tileCache变成NSMutableDictionary而不是NSCache时所发生的事情。另外,在调试区域中,它说:
tile = NSData * 0x0134dc59 <Variable is not NSData>如果传入一个NSString,它也会这样做,并表示变量不是NSString。
另外,我可以将key硬编码为"A“,并尝试以"A”的形式再次访问它,结果是相同的。
有什么想法吗?
发布于 2012-10-26 20:30:15
-valueForKey:是一种KVC方法,使用-objectForKey:
发布于 2012-10-26 15:09:51
我不认为问题是NSData,我想可能是用你的钥匙。仔细看看这个stringWithFormat -如果它们都是整数,那么您可能应该使用%d而不是%i,因为%d是符合32位的。如果它们是浮点数,则应该使用%f。
https://stackoverflow.com/questions/13089452
复制相似问题