2010-06-10 60 views
2

我在将URLResponses缓存到磁盘时遇到问题。我想这是因为我要下载的数据需要重新加载时,它的http-header中的expires-tag会被满足,而不是更早。另外,我希望iPod touch用户能够在联机时下载一次数据,然后脱机使用。iphone:磁盘上的NSURLCache

我这样做是它重新推出应用程序时,缓存的事情工作正常的内存,但失败:从iOS的5

UPDATE

NSURLRequest* menuRequest = [NSURLRequest requestWithURL:mensaURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval: 10]; 
NSCachedURLResponse* cachedMenuResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:menuRequest]; 
if (cachedMenuResponse) { 
    // received data is a member of that class to which the asynchronous 
    // download writes and which is then being used in updateDataFromDownload 
    // to retrieve my data structure from the download. 
    self.receivedData = [NSMutableData dataWithData:[cachedMenuResponse data]]; 
    [self updateDataFromDownload]; 
    NSLog(@"using data from cache"); 
} else { 
    NSLog(@"opening connection"); 
    [NSURLConnection connectionWithRequest:menuRequest delegate:self]; 
} 

回答

5

AFAIK的NSURLRequest/NSURLConnection的支持缓存到磁盘:@Rob在评论中正确指出:

我发现如果(a)您使用默认的NSURLRequest cachePolicy NSURLRequestUseProtocolCachePolicy;和(b)响应不包括缓存控制头,它不会缓存到磁盘。如果您使用NSURLRequestReturnCacheDataElseLoad的cachePolicy,或者如果来自服务器的响应 指定了特定的Cache-Control标头(例如 public,max-age = 1835400),它将缓存到持久性存储。

+0

的文件说,这样做,或者至少暗示提供方法来设置缓存所使用的磁盘容量时。 – SmokeDispenser 2010-06-10 18:43:24

+1

是的,我知道。我仍然认为它不被支持。例如,请参阅https://devforums.apple.com/message/182443#182443和http://github.com/rs/SDURLCache。 – 2010-06-10 19:36:09

+0

谢谢你。 SDURLCache提供了一个简单的方法来完成我想要的:) – SmokeDispenser 2010-06-13 14:39:26

3

SDURLCache是磁​​盘缓存NSURLCache的一个很好的子类,非常注重性能。

希望这有助于 文森特

+0

这是一个很好的库,但我听说iOS 5.0+已经修复NSURLCache,现在可以正常工作在磁盘上。如果你需要更多的控制,SDURLCache是​​很好的。 – Biclops 2012-11-22 00:09:54