Apollo iOS swift Всегда получать из локального кэша GraphQl - PullRequest
0 голосов
/ 29 октября 2018

Когда я использую Apollo для работы с API GraphQl для каждой выборки в первый раз, только выборки Apollo с сервера, иначе всегда выборка получает из локального кэша

let apollo = ApolloClient(url: URL(string: graphQLEndpoint)!)
let meetingsQuery = AllMeetingsQuery()
apollo.fetch(query: meetingsQuery) { [weak self] result, error in
  guard let meetings = result?.data?.allMeetings else { return }
  print(conferences.count)
  self?.conferences = conferences.map {$0.fragments.meetingDetails }
}

1 Ответ

0 голосов
/ 29 октября 2018

Каждый запрос с сервера может контролироваться CachePolicy

A Политика кэширования , которая указывает, должны ли результаты быть получены с сервера или загружены из локального кэша.

public enum CachePolicy {
  /// Return data from the cache if available, else fetch results from the server.
  case returnCacheDataElseFetch
  ///  Always fetch results from the server.
  case fetchIgnoringCacheData
  /// Return data from the cache if available, else return nil.
  case returnCacheDataDontFetch
}

Значением по умолчанию является returnCacheDataElseFetch , что означает, что Apollo возвращает данные из кэша, если они доступны, в противном случае извлекает результаты с сервера.

Я решил проблему, изменив cachePolicy с помощью fetchIgnoringCacheData

apollo.fetch(query: meetingsQuery ,cachePolicy: .fetchIgnoringCacheData)  { [weak self] result, error in
  guard let meetings = result?.data?.allMeetings else { return }
  print(conferences.count)
}
...