我試圖執行一個新的視圖控制器,但segue被調用兩次,並且新的視圖控制器出現兩次。
我正在使用執行GET請求到API來檢索數據的方法。
該方法使用完成處理程序。當使用DispatchQueue.main.async時segue調用兩次
func getSearchResultsForQuery(_ query: String, completionHandlerForSearchResultsForQuery: @escaping (_ success: Bool, _ error: NSError?) -> Void)
當方法成功完成時,根據需要從主隊列中調用我的segue。
我設置了斷點,所以我可以看到發生了什麼,執行從performSegue跳回到檢查方法是否成功的條件,然後繼續,直到第二次調用segue。
我試過了一個純粹的程序化的segue,但結果是一樣的。
我還添加了一個打印語句,如果我註釋掉了這個語句,打印語句只會被調用一次。
我以前使用過這種模式很多次,從來沒有遇到過問題,我無法弄清楚爲什麼會發生這種情況。
我做的不同,這一次的唯一的事情是用斯威夫特3和使用的dispatch_async代替(dispatch_get_main_queue()DispatchQueue.main.async
這是它給我這個問題的功能:
@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