新しいView ControllerにSegueを実行しようとしていますが、Segueが2回呼び出されていて、新しいView Controllerが2回表示されます。
私は、データを取得するためにAPIにGETリクエストを実行するメソッドを使用しています。
このメソッドは、完了ハンドラを使用します。DispatchQueue.main.asyncを使用するとsegueが2回呼び出される
func getSearchResultsForQuery(_ query: String, completionHandlerForSearchResultsForQuery: @escaping (_ success: Bool, _ error: NSError?) -> Void)
メソッドが正常に完了すると、必要に応じてメインキュー内からsegueが呼び出されます。
私は何が起こっているのかを見ることができ、performSegueから実行がジャンプしてメソッドが成功したかどうかをチェックし、segueがもう一度呼び出されるまで続行する条件にジャンプします。
私は純粋にプログラム的なセグを試しましたが、結果は同じでした。
私もprint文を追加しました。私がsegueをコメントアウトすると、print文は1回だけ呼び出されます。
私はこれまで同じパターンを何度も使ってきましたが、問題は一度もありませんでした。なぜこれが起こっているのか分かりません。 。
私はこの時間がスウィフト3を使用して、代わりにdispatch_asyncのDispatchQueue.main.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)")
}
}
}
編集:私は問題が何であるかを知りませんでしたが、ストーリーボードを完全に削除し、それを作り直してみました。
私はこれを試しましたが、URLSession GETリクエストでエラーが発生します。 – lxirsh