• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-11 17:48:44 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

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

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

我已经设置了断点,所以我可以看到发生了什么,并且执行从 performSegue 跳回到检查方法是否成功的条件,然后继续直到第二次调用 segue。
我尝试了一个纯程序化的segue,但结果是一样的。
我还添加了一个print语句,如果我注释掉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("erorming segue for food item: \(searchQuery)")
                    self.performSegue(withIdentifier: "showFoodItems", sender: self)
                }
            } else {
                print("error: \(error)")
            }
        }
}

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



Best Answer-推荐答案


我知道这不是解决此问题的好方法,而且由于声誉低,我无法发表评论,但是如果将整个 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap