У меня есть приложение, которое использует GraphQL и платформу apollo для отображения tableView со списком стран. У меня есть кнопка на панели инструментов, которая при нажатии отображает диалоговое окно с предупреждением, позволяющее пользователю ввести название страны, чтобы оно могло быть добавлено в базу данных на AWS. Проблема в том, что внутри функции execute (mutation: GraphQLMutation) я не могу получить свои данные и перезагрузить tableView, чтобы немедленно отобразить мои изменения. Я могу получить свой список с помощью отдельной кнопки бара.
Я попытался просмотреть документацию и пошагово просмотреть программу, но кажется, что функция fetch и функция перезагрузки вызываются слишком рано внутри функции execute (mutation: GraphQLMutation), потому что при перезагрузке tableView количество стран уменьшается чем фактическое количество стран в базе данных. Например, при добавлении страны countryCount будет равен 30, а не 31. Поэтому при перезагрузке tableView он перезагружается до добавления новой страны.
let action = UIAlertAction(title: "Add Country", style: .default) { (action) in
if let newCountry = textField.text {
let addCountryMutation = AddCountryMutation(name: newCountry)
self.apollo.perform(mutation: addCountryMutation) { (result, error) in
self.fetchQueryResults()
print("Country Added")
}
}
}
extension FetchCountryTableVC {
func fetchQueryResults() {
apollo.fetch(query: countriesQuery) { (result, error) in
if let countries = result?.data?.countries.count {
self.countriesCount = countries
}
self.tableView.reloadData()
}
}
}
Я ожидаю, что после выполнения мутации запустится функция fetchQueryResults (), извлекая счетчик стран и перезагружая tableView, чтобы в списке стран отображалась вновь добавленная страна.
На самом деле происходит перезагрузка tableView без отображения обновленных данных.