我正在尝试使用NSCache将PNG存储为NSData。无论缓存是否为空,每当我尝试从缓存中获取一个数据时,都会出现以下信息:
2012-10-26 09:49:28.860 SledMap [55917:11503] * Terminating app due to uncaught exception 'NSUnknownKeyException',reason:'[valueForUndefinedKey:]:此类不符合键值编码规则,不能识别键0_0_5。'
如果我保持代码不变,但将NSCache更改为NSMutableDictionary,则可以正常工作。我声明我的缓存:
如果它是空的,我希望它只返回nil,这就是当我将self.tileCache更改为NSMutableDictionary而不是NSCache时发生的情况。此外,在调试区域中,它显示:
2012-10-26 09:49:28.860 SledMap [55917:11503] * Terminating app due to uncaught exception 'NSUnknownKeyException',reason:'[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
为"A",然后再次尝试使用"A"访问它,结果也相同。
有什么想法吗?