Я пытаюсь выполнить segue для нового контроллера представлений, но segue вызывается дважды, а новый контроллер представления появляется дважды.
Я использую метод, который выполняет запрос GET API для извлечения данных.
Этот метод использует обработчик завершения.segue вызывается дважды при использовании DispatchQueue.main.async
func getSearchResultsForQuery(_ query: String, completionHandlerForSearchResultsForQuery: @escaping (_ success: Bool, _ error: NSError?) -> Void)
Когда метод завершен успешно, мой вызов вызывается изнутри основной очереди, как требуется.
Я установил точки останова, чтобы я мог видеть, что происходит, и выполнение переходит от выполнения функции до состояния, которое проверяет, был ли метод успешным, а затем продолжается до тех пор, пока вызов не будет вызван во второй раз.
Я пробовал чисто программный переход, но результат был тот же.
Я также добавил оператор печати, и, если я прокомментирую segue, оператор print вызывается только один раз.
Я использовал этот же шаблон несколько раз раньше и никогда не имел проблемы с ним, и я просто не могу понять, почему это происходит.
Единственное, что я делаю разные на этот раз использует Swift 3 и использование DispatchQueue.main.async вместо dispatch_async (dispatch_get_main_queue()
Вот функция, которая дает мне эту проблему:.
@IBAction func search(_ sender: UIButton) {
let searchQuery = searchField.text
TIClient.sharedInstance().getSearchResultsForQuery(searchQuery!) { (success, error) in
if success {
print("Food items fetch successful")
DispatchQueue.main.async {
print("Perorming segue for food item: \(searchQuery)")
self.performSegue(withIdentifier: "showFoodItems", sender: self)
}
} else {
print("error: \(error)")
}
}
}
Редактирование: я никогда не узнал, в чем проблема, но полностью удалил рассказную доску и воссоздал ее.
Я только что пробовал это, но это вызывает ошибку с запросом URL-адреса GET. – lxirsh