繁体   English   中英

Swift 3 - 在异步作业后关闭视图控制器

[英]Swift 3 - Dismissing view controller after async job

我使用的是Swift 3,Xcode 8.2。

我有一个视图控制器,上面有一个按钮。 按下按钮时,它会运行下面的buttonPressed功能。 它启动异步作业,需要几秒钟才能完成,在此期间会出现旋转齿轮活动指示器。 一旦作业完成,我希望活动指示器被关闭,视图控制器也要关闭它最初来自的VC。

func buttonPressed() {

    // Set up some stuff here
    ...

    // this code block here is to asynchronously run the processing job
    // while the activity indicator gear spins
    self.displaySpinningGear()
    DispatchQueue.main.async {
        self.doSomeJobProcessing()
    }
    self.dismiss(animated: true, completion: nil)

    // also dismiss the camera view
    self.presentingViewController?.dismiss(animated: true, completion: nil) // error here
}

但是,我在最后一个语句中收到错误:

[断言]尝试在转换时关闭演示控制器。 (<_UIAlertControllerAlertPresentationController:0x109e3b190>)2017-03-03 21:37:56.833899 EOB-Reader [27710:6869686] [断言] transitionViewForCurrentTransition没有设置,演示控制器在演示期间被解雇了? (<_UIAlertControllerAlertPresentationController:0x109e3b190>)

任何帮助将不胜感激。

一次执行任何过渡。

if let viewController = presentingViewController {
  // This block will dismiss both current and a view controller presenting current.
  viewController.dismiss(animated: true, completion: nil)
} else {
  // This block will dismiss only current view controller
  self.dismiss(animated: true, completion: nil)
}

两个转换操作不能同时执行。

  • 在源代码中,您将使用动画关闭当前视图控制器。 现在动画通常需要大约0.25秒的时间才能完成其操作。

  • 现在,在下一行中,您将尝试关闭已呈现当前视图控制器的(**)视图控制器。 (在你的情况下(**)视图控制器也由一些其他视图控制器呈现。)因此,在几分之一秒/毫秒(**)内,视图控制器也会尝试用动画来解除它自我。

  • 此时您的当前视图控制器正在被关闭,并且(**)视图控制器也将开始关闭操作。 因此,两个操作在主执行线程上相互冲突。 结果成了一个问题,你正面临着。

另外,分享您的代码块

self.doSomeJobProcessing()

如果您在此处设置了任何其他视图/控制器转换操作,请在此处共享。

请记住,当您调度异步时,通常会调度后台线程以防止UI阻塞。 需要在主线程上修改所有屏幕(UI)组件。 因此,从主线程开始进度微调器,将繁重的工作分配到后台,然后重新发送到您想要的主线程。 this.dismissviewcontroller:动画

将很快更新代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM