NSURLCaching с dataTask не в состоянии прочитать кэш обратно с NSURLRequest в автономном режиме - PullRequest
0 голосов
/ 06 декабря 2018

Я очень смущен системой кэширования iOS.Это должно быть просто, но это не так (для меня).Я пишу приложение для базы данных, которое обеспечивает внешний веб-доступ к ограниченному кругу дополнительных справочных материалов в виде веб-страниц.Иногда пользователю может понадобиться доступ к внешним веб-страницам, когда они находятся в поле, где нет данных WiFi или сотовой сети.Я подумал, что просто использовать URLCaching, просматривая множество внешних страниц в то время, когда Интернет доступен.Затем используйте политику запроса NSURLRequestReturnCacheDataElseLoad.Итак, я создал общий кэш в AppDelegate, затем одноэлементный сеанс:

    NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
    sessionConfig.URLCache = self->_myCache;
    sessionConfig.requestCachePolicy = NSURLRequestReturnCacheDataElseLoad;
    sessionConfig.HTTPMaximumConnectionsPerHost = 5;
    session = [NSURLSession sessionWithConfiguration:sessionConfig
                                            delegate:self
                                       delegateQueue:nil];

Затем заполните кэш с помощью dataTask (поскольку пробная версия downloadTask не заполнила кэш):

    NSURLSessionDataTask *myTask = [[NSURLSessionDataTask alloc] init];
do {
      myTask = [self.session dataTaskWithRequest:req];
      myTask.taskDescription = searchName; //Iterating several values of searchName
      [myTask resume]; } while ...searchNames...

Это заполняет кеш, о чем свидетельствуют cache.currentDiskUsage и cache.currentMemoryUsage.Запустите веб-цикл чтения после того, как начальные выборки больше не увеличивают размер кэша.

Вот проблема: При запуске этого фрагмента кода с отключенным интернетом невозможно прочитать из кэша

NSURL *nsurl=[NSURL URLWithString:@"https:searchName"];
NSURLRequest *nsrequest = [NSURLRequest requestWithURL:nsurl cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:60.0];
[_webView loadRequest:nsrequest];

Кроме того, после заполнения кеша попытка повторить начальный раунд выборок с отключенным Интернетом приводит к

TIC TCP Conn Failed [1:0x6000028ce580]: 1:50 Err(50)

Нет ли совместимости кеша между HTTP, если он заполнен dataTask, и чтением изкеш с NSURLRequest?Что я делаю неправильно?Есть ли другой подход для решения моей дизайнерской задачи?

1 Ответ

0 голосов
/ 13 декабря 2018

После трех дней экспериментов я могу создать кэш около трехсот веб-страниц (со связанными встроенными изображениями) и считывать их обратно из постоянной памяти при каждом запуске приложения.Единственный подход к доступу к кешу - использовать NSURLCache cachedResponseForRequest: метод.Использование других форм доступа к URL с соответствующим CachePolicy, похоже, не работает.

Кажется, что есть побочный эффект метода cachedResponseForRequest: он только передает исходный HTML-документ в wkwebview, и ни одинсвязанных ресурсов, которые также находятся в моем кеше.

У кого-нибудь есть предложение получить этот лимит?

...