Как перезагрузить данные tableView внутри функции выполнения (мутации: GraphQLMutation)? - PullRequest
0 голосов
/ 25 марта 2019

У меня есть приложение, которое использует 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 без отображения обновленных данных.

...