我试图执行一个新的视图控制器,但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