NSURLRequestReturnCacheDataElseLoad не загружается из кеша при первом запросе?

Я создаю приложение для iOS, которому нужно получать много информации из удаленного API. Есть много http-запросов, которые можно отлично кэшировать, но кажется, NSURLConnection не кэширует достаточно агрессивно: каждый раз, когда я убиваю приложение и запускаю его снова, все запросы выполняются снова, а не из кеша ( iOS 5 должна использовать дисковый кеш). Если я сделаю тот же запрос во второй раз (в течение срока службы приложения), он будет поступать из кеша.

Я использую политику NSURLRequestReturnCacheDataElseLoad, и заголовки элементов управления кешем на http-сервере настроены так, что все можно кэшировать.

Итак, проблема в том, что все запросы повторяются каждый раз при запуске приложения. Почему это не с диска?

Изменить: похоже, эта проблема существует только в том случае, если в URL-адресе есть запрос. Например, когда я запрашиваю http://www.apple.com/, все в порядке, на свежем запуск приложения, фактически никаких запросов не поступало. Когда я перехожу на http://www.apple.com/?test, то первый запрос всегда делал.

Редактировать 2: похоже, TTURLRequest (часть three20) и SDURLCache являются решением.


person Kevin Renskers    schedule 22.10.2012    source источник


Ответы (1)


Отвечая на свой вопрос:

Решение состоит в том, чтобы добавить SDURLCache в ваш проект, а затем добавить этот код в свой - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions метод:

SDURLCache *URLCache = [[SDURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:24 * 1024 * 1024 diskPath:[SDURLCache defaultCachePath]];
[NSURLCache setSharedURLCache:URLCache];

Это намного более агрессивно с кешированием, включая URL-адреса с запросами.

person Kevin Renskers    schedule 22.10.2012