gpt4 book ai didi

ios - 使用 DispatchQueue.main.async 时 segue 调用了两次

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:56:55 28 4
gpt4 key购买 nike

我正在尝试对新的 View Controller 执行转接,但是转接被调用了两次并且新的 View Controller 出现了两次。
我正在使用一种方法来对 API 执行 GET 请求检索数据。
该方法使用完成处理程序。

func getSearchResultsForQuery(_ query: String, completionHandlerForSearchResultsForQuery: @escaping (_ success: Bool, _ error: NSError?) -> Void)

当该方法成功完成时,我的 segue 将根据需要从主队列中调用。

我设置了断点,这样我就可以看到发生了什么,并且执行从 performSegue 跳回到条件检查方法是否成功,然后继续直到第二次调用 segue。
我试过一个纯程序化的转场,但结果是一样的。
我还添加了一个打印语句,如果我注释掉转场,打印语句只被调用一次。

我以前多次使用过相同的模式,但从来没有遇到过问题,我只是想不通为什么会这样。
这次我唯一不同的是使用 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)")
}
}
}

编辑:我从来没有发现问题出在哪里,但是完全删除 Storyboard并重新创建它解决了问题。

最佳答案

我知道这不是解决此问题的好方法,而且由于声誉低下我无法发表评论,但如果您将整个 if 语句包装在 DispatchQueue.main 中会发生什么情况?

 @IBAction func search(_ sender: UIButton) {

let searchQuery = searchField.text

TIClient.sharedInstance().getSearchResultsForQuery(searchQuery!) { (success, error) in
DispatchQueue.main.async {
if success {
print("Food items fetch successful")
self.performSegue(withIdentifier: "showFoodItems", sender: self)
} else {
print("error")
}
}
}

这会产生不同的结果还是相同的结果?检查 Bool 不需要太多的处理能力,所以我不认为将它放在主队列中是一件坏事,但我这样做是为了解决问题。抱歉,我不能就此发表评论。

关于ios - 使用 DispatchQueue.main.async 时 segue 调用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39962797/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com