Кеширование на AFNetworking 2.0

Итак, вот сделка. Недавно я начал использовать AFNetworking для загрузки нескольких файлов при запуске, используя следующий код:

NSMutableURLRequest* rq = [api requestWithMethod:@"GET" path:@"YOUR/URL/TO/FILE"     parameters:nil];
AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:rq] autorelease];

NSString* path=[@"/PATH/TO/APP" stringByAppendingPathComponent: imageNameToDisk];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

    NSLog(@"SUCCCESSFULL IMG RETRIEVE to %@!",path)

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    // Deal with failure
}];

Мой путь фактически подключен к переменной пути (извините, сейчас не на нужном компьютере, чтобы на самом деле скопировать текст пасты, но он точно такой же, как и выше, с разными путями)

И все работает отлично! Я получаю файл успешно загружен и все. Моя текущая проблема заключается в том, что я пытаюсь заставить кэширование работать, но у меня много трудностей. По сути, я не уверен, что мне действительно нужно делать на стороне клиента с AFNetworking 2.0. Мне все еще нужно настроить NSURlCache? Нужно ли устанавливать заголовок типа кэширования для операции запроса по-другому? Я подумал, что, возможно, он просто полностью встроен, но я получаю статус 200 каждый раз, когда выполняется код, даже без изменений в файле. Если мне действительно нужно использовать NSUrlCache, нужно ли мне вручную сохранять электронный тег на успешных блоках, запрашивая операцию, и затем возвращать это обратно? Любая помощь о том, как прогрессировать, будет высоко ценится. Спасибо, парни!

1 ответ

AFNetworking по умолчанию использует NSURLCache для кэширования. Из FAQ:

AFNetworking использует возможности кеширования, уже предоставленные NSURLCache и любой из его подклассов. Пока ваш NSURLRequest объекты имеют правильную политику кэширования, а ваш ответ сервера содержит действительный Cache-Control заголовок, ответы будут автоматически кэшироваться для последующих запросов.

Обратите внимание, что этот механизм кэширует NSData поэтому каждый раз, когда вы извлекаете данные из этого кэша, вам нужно выполнять NSData -До- UIImage операция. Этого недостаточно для быстрого отображения, например, если вы показываете UITableView или же UICollectionView,

Если это так, посмотрите на UIImageView+AFNetworking, который добавляет загрузки и кеширование UIImage возражает против UIImageView, Для некоторых приложений вы можете просто использовать готовую реализацию, но она очень проста. Возможно, вы захотите взглянуть на исходный код этого класса (он не очень длинный) и использовать его в качестве отправной точки для вашего собственного механизма кэширования.

Другие вопросы по тегам