将URL设置为NSCache无法正常工作的密钥

时间:2015-05-12 04:39:02

标签: ios objective-c caching nscache

我扩展了NSCache并创建了一个Singleton类,如下所示

+(instancetype)sharedDataCache {
if (!sharedDataCache) {
    sharedDataCache = [[QDataCache alloc] init];
    [sharedDataCache setTotalCostLimit:19999];
    [sharedDataCache setCountLimit:15];
    [[NSNotificationCenter defaultCenter] addObserver:sharedDataCache selector:@selector(removeAllObjects) name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
}
return sharedDataCache;
}

在一个类中设置对象:

[_cache setObject:receivedData forKey:[[connection currentRequest]URL]];

和 在其他类中获取对象:

image = [UIImage imageWithData:[_caches objectForKey:keyString]];//keystring is the url

两个键在日志中是相同的,但我得到NULL :(。'如果我用同样的方法对键进行硬编码它工作很精细'。但我想要唯一的密钥(URL)。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您不能通过NSURL键放置值,然后通过NSString键获取值。 NSURL对象和NSString对象的散列不一样。

你应该做

[_cache setObject:receivedData forKey:[[[connection currentRequest]URL] absoluteString]];

或者

image = [UIImage imageWithData:[_caches objectForKey:[NSURL URLWithString:keyString]]];