首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSCache:在尝试访问缓存项时总是得到“不符合键值编码”的信息。

NSCache:在尝试访问缓存项时总是得到“不符合键值编码”的信息。
EN

Stack Overflow用户
提问于 2012-10-26 15:03:03
回答 2查看 2.2K关注 0票数 9

我试图使用NSCache将PNG存储为NSData。每当我试图从缓存中取出一个缓存时,无论缓存是否为空,我都会得到:

2012年10月26日09:49:28.860 SledMap55917:11503 *终止应用程序由于非正常异常'NSUnknownKeyException',原因:‘valueForUndefinedKey::这个类不符合键0__5的键值编码。’

如果我将代码保持原样,但将NSCache更改为NSMutableDictionary,则可以正常工作。

我声明我的缓存:

代码语言:javascript
复制
@property (nonatomic, strong) NSCache *tileCache;

分配它(在viewDidLoad中):

代码语言:javascript
复制
self.tileCache = [[NSCache alloc] init];
self.tileCache.delegate = self;

向缓存中添加一些内容:

代码语言:javascript
复制
NSString *key = [NSString stringWithFormat:@"%i_%i_%i",x,y,endLevel];
NSData *pngData = [NSData dataWithData:UIImagePNGRepresentation(image)];
[self.tileCache setObject:pngData forKey:key];

当我把它拿回来的时候,我得到了上面的错误。

代码语言:javascript
复制
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时所发生的事情。另外,在调试区域中,它说:

代码语言:javascript
复制
tile = NSData * 0x0134dc59 <Variable is not NSData>

如果传入一个NSString,它也会这样做,并表示变量不是NSString。

另外,我可以将key硬编码为"A“,并尝试以"A”的形式再次访问它,结果是相同的。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-26 20:30:15

-valueForKey:是一种KVC方法,使用-objectForKey:

票数 24
EN

Stack Overflow用户

发布于 2012-10-26 15:09:51

我不认为问题是NSData,我想可能是用你的钥匙。仔细看看这个stringWithFormat -如果它们都是整数,那么您可能应该使用%d而不是%i,因为%d是符合32位的。如果它们是浮点数,则应该使用%f。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13089452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档