2010-06-10 3 views
2

У меня возникли проблемы с кэшированием URL-адресов на диск. Я хочу, потому что загружаемые данные требуют перезагрузки, когда тег expires в его http-заголовке встречается, а не раньше. Кроме того, я хочу, чтобы iPod touch-пользователи могли загружать данные один раз в режиме онлайн, а затем использовать его в автономном режиме.iphone: NSURLCache на диске

я это делаю, который прекрасно работает для кэширования вещей в памяти, но терпит неудачу, когда перезапуска приложения:

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 кэширование поддержки на диск с прошивкой 5.

UPDATE : @Rob Правильно написано в комментариях:

Я обнаружил, что если (a) используется значение по умолчанию NSURLRequest cachePolicy NSURLRequestUseProtocolCachePolicy; и (b) ответ не включает заголовок Cache-Control, он не будет кэшировать на диск. Если вы используете cachePolicy для NSURLRequestReturnCacheDataElseLoad или если ответ с сервера указывает конкретный заголовок Cache-Control (например, public, max-age = 1835400), он будет кэшироваться в постоянное хранилище.

+0

документация говорит, что делает, или, по крайней мере, следует, что при предоставлении методов, чтобы установить емкость диска, используемую в кэше. – SmokeDispenser

+1

Да, я знаю. Я все еще думаю, что это не поддерживается. Например, https://devforums.apple.com/message/182443#182443 и http://github.com/rs/SDURLCache. –

+0

Спасибо за это. SDURLCache предлагает простой способ сделать именно то, что я хочу :) – SmokeDispenser

3

SDURLCache является отличным подклассом NSURLCache для кэширования диска, с высокой степенью производительности.

Надеется, что это помогает, Винсента

+0

Это отличная библиотека для использования, хотя я слышал, что iOS 5.0+ имеет NSURLCache, исправленный для правильной работы на диске. SDURLCache хорош, если вам нужно больше контроля. – Biclops

Смежные вопросы