Objective c NSCache:总是得到;“不符合键值编码要求”;尝试访问缓存项时

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,它就可以正常工作 我声明我的缓存

我正在尝试使用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>