[英]Swift 4 Call ViewWillAppear after dismissing View Controller
[英]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.