Установка NSURLRequestCachePolicy и NSURLSession

Я создаю NSURLSession с sessionConfiguration, где я явно установил requestCachePolicy а также URLCache,

sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfiguration.requestCachePolicy = NSURLRequestReturnCacheDataElseLoad;
sessionConfiguration.URLCache = [NSURLCache sharedURLCache];

Запрос создается и передается в качестве аргумента в NSURLSessiondataTaskWithRequest:CompletionHandler: метод. Запрос построен так:

request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:kAENServiceNetworkTimeout];

Проблема 1:

Настроить так, нет fsCachedData Папка создается на диске, а кэшированные данные не используются. Если запрос создан просто с помощью:

request = [NSMutableURLRequest requestWithURL:url];

Кеш создается на диске, а образ используется как положено. Это ошибка в коде Apple?

Проблема 2:

Ни в одном из этих случаев URLSession:dataTask:willCacheResponse:completionHandler: Метод делегата вызван. Находятся ли в их ситуациях такие ситуации?

Обновить:

Я отправил пример проекта на Github, https://github.com/mattmorton/cache-testing

1 ответ

Решение

Проблема 1:

Я думаю, что мое понимание NSURLRequestReturnCacheDataElseLoad было неверным. В этом случае ответ не кэшируется.

Проблема 2:

Из заголовка Apple для NSURLSession в категории NSURLSessionAsynchronousConvenience:

удобные методы обработки данных... создают задачи, которые обходят обычные вызовы делегатов для ответа и доставки данных, и предоставляют простой отменяемый асинхронный интерфейс для приема данных.

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

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