Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法在dispatchqueue内手动控制performSegue()_Ios_Swift_Xcode_Segue_Dispatch Queue - Fatal编程技术网

Ios 无法在dispatchqueue内手动控制performSegue()

Ios 无法在dispatchqueue内手动控制performSegue(),ios,swift,xcode,segue,dispatch-queue,Ios,Swift,Xcode,Segue,Dispatch Queue,我有一个button对象,它运行一个后台线程进行计算,一个主线程进行UI更新。完成后,我想使用performsgue(带有标识符:“thirdViewController”,sender:self)移动到另一个视图控制器,但它在调度队列中不起作用。以前,我曾多次使用performsgue()在视图控制器之间切换,我总是能够手动控制它。相反,它几乎立即移动到下一个ViewController,而不首先完成计算 我尝试使用self.present(thirdViewController(),动画:t

我有一个button对象,它运行一个后台线程进行计算,一个主线程进行UI更新。完成后,我想使用
performsgue(带有标识符:“thirdViewController”,sender:self)
移动到另一个视图控制器,但它在
调度队列中不起作用。以前,我曾多次使用
performsgue()
在视图控制器之间切换,我总是能够手动控制它。相反,它几乎立即移动到下一个ViewController,而不首先完成计算

我尝试使用
self.present(thirdViewController(),动画:true,完成:nil)
self.navigationController?.pushViewController(thirdViewController(),动画:true)
来更改ViewController,但他们给了我一个黑屏

@IBAction func generateText(_ sender: Any) {
    DispatchQueue.global(qos: .userInteractive).async {
        //computation code
        DispatchQueue.main.sync {
            //update UI code
            self.performSegue(withIdentifier: "Segue2", sender: self)
        }
    }
}

这种行为可能由两个不同的问题引起

  • 此按钮可能同时连接了
    @iAction
    和segue。确保您只有
    @iAction
    。segue本身不应连接到按钮,而应来自场景的“视图控制器”出口(在顶部栏中),而不是单元格或按钮。如果是这种情况,请删除现有segue,然后从场景上方的栏中添加另一个segue:

    然后给这个segue一个标识符,然后您可以通过编程方式调用它

  • 或者,“计算代码”以某种方式允许它在完成之前流向
    DispatchQueue.main.async
    调用(即,计算代码正在启动本身是异步的东西)


  • 没有看到你的代码,我们不能说。但是,从您随后的评论来看,第一个观察结果似乎是您案例中问题的根源,但为了将来的读者,我已经概述了这两种选择。

    这种行为可能是由两个不同的问题引起的

  • 此按钮可能同时连接了
    @iAction
    和segue。确保您只有
    @iAction
    。segue本身不应连接到按钮,而应来自场景的“视图控制器”出口(在顶部栏中),而不是单元格或按钮。如果是这种情况,请删除现有segue,然后从场景上方的栏中添加另一个segue:

    然后给这个segue一个标识符,然后您可以通过编程方式调用它

  • 或者,“计算代码”以某种方式允许它在完成之前流向
    DispatchQueue.main.async
    调用(即,计算代码正在启动本身是异步的东西)


  • 没有看到你的代码,我们不能说。但是,从您随后的评论来看,第一个观察结果似乎是您案例中问题的根源,但为了将来的读者,我已经概述了这两种选择。

    请勿
    .sync{
    .Is
    computation code
    asynchronous?
    userInteractive
    qos Is
    mainQueue
    感谢您的帮助,结果是我将performsgue()函数绑定到了按钮上,因为我不知道可以将segue绑定到view cotnroller(noob警报),代码正在按预期工作。我们是否可以将此标记为已关闭,或是找到答案的人是否可以将其作为答案写入并接受,以便我们知道此问题已解决:)请勿
    。同步{
    .Is
    computation code
    asynchronous?
    userInteractive
    qos Is
    mainQueue
    感谢您的帮助,结果是我将performsgue()函数绑定到了按钮上,因为我不知道可以将segue绑定到view cotnroller(noob警报),代码正在按预期工作。我们是否可以将其标记为已关闭,或者是否可以将找到答案的人将其作为答案写入并接受,以便我们知道此问题已解决:)