Objective c NSCache:总是得到;“不符合键值编码要求”;尝试访问缓存项时
我正在尝试使用NSCache将PNG存储为NSData。每当我尝试从缓存中取出一个时,无论缓存是否为空,我都会得到: 2012-10-26 09:49:28.860 SledMap[55917:11503]*由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[valueForUndefinedKey:]:此类不符合密钥0_0_5的键值编码。” 如果我让代码保持原样,但将NSCache更改为NSMutableDictionary,它就可以正常工作 我声明我的缓存:Objective c NSCache:总是得到;“不符合键值编码要求”;尝试访问缓存项时,objective-c,ios,cocoa,nscache,Objective C,Ios,Cocoa,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;
分配它(在viewDidLoad中):
将某些内容添加到缓存:
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>
tile=NSData*0x0134dc59
如果我传入一个NSString,它也会这样做,并说变量不是NSString
此外,我可以硬编码键
为“A”,并尝试以“A”的形式再次访问它,结果相同
有什么想法吗?我不认为问题在于NSData,我想可能是你的钥匙。仔细查看stringWithFormat-如果它们都是整数,则可能应该使用%d而不是%i,因为%d是32位兼容的。如果它们是浮动,则应使用%f.
-valueForKey:
是一种KVC方法;使用-objectForKey:
如果我将键硬编码为“A”或其他任何形式,我会得到相同的结果,并且当它是NSMutableDictionary而不是NSCache时,如上所述使用键可以起作用。
tile = NSData * 0x0134dc59 <Variable is not NSData>