Зачем мне нужно было устанавливать политику кэширования для URLRequest, если она уже была установлена в URLSession, чт ⇐ IOS
Зачем мне нужно было устанавливать политику кэширования для URLRequest, если она уже была установлена в URLSession, чт
Я создаю приложение для iOS, которому необходимо часто проверять изменения в файле JSON на моем сервере. В процессе этого я обнаружил особенность кэширования. На моем сервере сейчас работает очень простой http-сервер, пока я начинаю работу.
Когда я понял, что кеширование мешает моим клиентам писать. Сначала я написал код:
let urlSession = URLSession(конфигурация: .ephemeral) функция updateModel() { let (data, _) = попробуйте await urlSession.data(from: URL(string: myURLString)!) // Делаем что-то с данными } Это было предложено на форуме разработчиков Apple.
Это не сработало, поэтому я пошел дальше и попробовал это
let urlSession = { var session = URLSession (конфигурация: .ephemeral) session.configuration.urlCache = ноль session.configuration.requestCachePolicy = .reloadIgnoringLocalAndRemoteCacheData ответный сеанс }() функция updateModel() { let (data, _) = попробуйте await urlSession.data(from: URL(string: myURLString)!) // Делаем что-то с данными } Этот подход был предложен в ответе на вопрос о переполнении стека здесь. Стоит отметить, что люди в комментариях упоминали, что у них это не сработало или им нужно было вызвать URLCache.shared.removeAllCachedResponses(), что не идеально. Я не хотел делать этот вызов, и этот код у меня не работал, поэтому я перешел к чему-то более сложному.
let urlSession = { var session = URLSession (конфигурация: .ephemeral) session.configuration.urlCache = ноль session.configuration.requestCachePolicy = .reloadIgnoringLocalAndRemoteCacheData ответный сеанс }() функция updateModel() { let request = URLRequest(url: URL(string: myURLString)!,cachePolicy:.reloadIgnoringLocalAndRemoteCacheData) let (data, _) = попробуйте дождаться urlSession.data(для: запроса) // Делаем что-то с данными } Я не знаю, откуда мне пришла в голову идея попробовать.
Итак, я гость. Ура! Оно работает. Но еще... зачем все это было нужно? Почему мне нужно было отключить кеш как на уровне URLSession, так и на уровне URLRequest? Связано ли это с использованием мной строкового URL-адреса, возможно, с тем, как мой сервер продает ресурсы, может быть, с iOS 17, типом контента, который я продаю. Я хотел бы понять больше.
Я создаю приложение для iOS, которому необходимо часто проверять изменения в файле JSON на моем сервере. В процессе этого я обнаружил особенность кэширования. На моем сервере сейчас работает очень простой http-сервер, пока я начинаю работу.
Когда я понял, что кеширование мешает моим клиентам писать. Сначала я написал код:
let urlSession = URLSession(конфигурация: .ephemeral) функция updateModel() { let (data, _) = попробуйте await urlSession.data(from: URL(string: myURLString)!) // Делаем что-то с данными } Это было предложено на форуме разработчиков Apple.
Это не сработало, поэтому я пошел дальше и попробовал это
let urlSession = { var session = URLSession (конфигурация: .ephemeral) session.configuration.urlCache = ноль session.configuration.requestCachePolicy = .reloadIgnoringLocalAndRemoteCacheData ответный сеанс }() функция updateModel() { let (data, _) = попробуйте await urlSession.data(from: URL(string: myURLString)!) // Делаем что-то с данными } Этот подход был предложен в ответе на вопрос о переполнении стека здесь. Стоит отметить, что люди в комментариях упоминали, что у них это не сработало или им нужно было вызвать URLCache.shared.removeAllCachedResponses(), что не идеально. Я не хотел делать этот вызов, и этот код у меня не работал, поэтому я перешел к чему-то более сложному.
let urlSession = { var session = URLSession (конфигурация: .ephemeral) session.configuration.urlCache = ноль session.configuration.requestCachePolicy = .reloadIgnoringLocalAndRemoteCacheData ответный сеанс }() функция updateModel() { let request = URLRequest(url: URL(string: myURLString)!,cachePolicy:.reloadIgnoringLocalAndRemoteCacheData) let (data, _) = попробуйте дождаться urlSession.data(для: запроса) // Делаем что-то с данными } Я не знаю, откуда мне пришла в голову идея попробовать.
Итак, я гость. Ура! Оно работает. Но еще... зачем все это было нужно? Почему мне нужно было отключить кеш как на уровне URLSession, так и на уровне URLRequest? Связано ли это с использованием мной строкового URL-адреса, возможно, с тем, как мой сервер продает ресурсы, может быть, с iOS 17, типом контента, который я продаю. Я хотел бы понять больше.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
URLSession реализует URLSessionDelegate для обхода любой проверки сертификата
Гость » » в форуме IOS - 0 Ответы
- 40 Просмотры
-
Последнее сообщение Гость
-