NSURLCache не загружается с диска после перезапуска

Я создаю приложение для iOS, используя Cordova/Phonegap, которое в основном имеет UIWebView и загружает мое веб-приложение из внешнего ресурса. (iOS6+)

Для запуска этого веб-приложения требуется HTML-код размером 450 КБ, и я хочу, чтобы этот файл кэшировался, когда в нем нет изменений. (меняется каждую неделю)

Для этого я настраиваю NSURLCache в своем AppDelegate во время инициализации:

NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024
                                                      diskCapacity:20 * 1024 * 1024
                                                          diskPath:nil];
 [NSURLCache setSharedURLCache:URLCache];

После загрузки приложения файлы теперь кэшируются, и я могу найти их в Library/Caches/APPName/fsCachedData.

Я использую CharlesProxy для просмотра запросов, и если приложение загружается один раз, все перезагрузки возвращают 304, не изменено, в этот файл.

Вот в чем проблема

Каждый раз, когда я открываю приложение iOS, хотя файл находится в папке кеша, оно снова загружает его с сервера и сохраняет самую последнюю версию; If-modified-since устанавливается не в параметр запроса в первом запросе после открытия, а в следующих.

Я не уверен, нужно ли мне явно просить Xcode загрузить NSURLCache с диска, или я неправильно его устанавливаю.

Может ли кто-нибудь увидеть проблему в процессе?

Больше информации:

Управление кэшем частное, max-age=31536000, необходимо пройти повторную проверку. NSURLRequest cachePolicy — это NSURLRequestUseProtocolCachePolicy.

Спасибо!


person fmgasparino    schedule 29.01.2014    source источник


Ответы (1)


Проблема была вызвана CordovaLibrary. У него есть CDVURLProtocol и CDVUserAgent, и они перехватывают запросы, противоречащие существующей информации.

Чтобы решить эту проблему, вы должны запретить CDVUserAgent устанавливать UserAgent, но это может повлиять на ограничения для локальных файлов. В моем случае источники извлекаются с сервера.

person fmgasparino    schedule 03.02.2014