NSCache:尝试访问缓存项目时总是"not key value coding-compliant"



我正在尝试使用NSCACHE将PNG存储为NSDATA。每当我尝试从缓存中撤回一个,无论缓存是否为空,我都会得到:

2012-10-26 09:49:28.860 sledmap [55917:11503] *终止App,由于未知的例外'nsunknownekeyexception'密钥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

如果它是空的,我希望它只能返回零,这就是当我制作self。另外,在调试区域,它说:

tile = NSData * 0x0134dc59 <Variable is not NSData>

如果我通过NSSTRING,它可以做同样的事情,并说变量不是NSSTRING。

另外,我可以将key硬代码为" A",并尝试以相同结果的" A"再次访问它。

有什么想法?

-valueForKey:是KVC方法;使用-objectForKey:

我不认为问题是NSDATA,我认为这可能与您的钥匙有关。仔细观察该字符串WithFormat-如果它们都是整数,则可能应该使用%d而不是%i,因为%d符合32位。如果它们是浮子,则应使用%f。

相关内容

  • 没有找到相关文章

最新更新