Меня очень смущает система кеширования 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? Что я делаю не так? Есть ли другой подход к решению моей задачи дизайна?