NSCache を使用して PNG を NSData として保存しようとしています。キャッシュが空かどうかに関係なく、キャッシュから 1 つ取り戻そうとすると、次のようになります。
2012-10-26 09:49:28.860 SledMap[55917:11503] *キャッチされない例外 'NSUnknownKeyException' によりアプリを終了します。理由: '[ 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 を NSCache ではなく NSMutableDictionary にすると発生します。また、デバッグ領域では、次のように表示されます。
tile = NSData * 0x0134dc59 <Variable is not NSData>
NSString を渡すと、同じことが行われ、変数が NSString ではないと表示されます。
また、「A」になるようにハードコーディングkey
して、「A」として再度アクセスしようとすると、同じ結果になります。
何か案は?