首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift 3-在异步作业后取消视图控制器

Swift 3-在异步作业后取消视图控制器
EN

Stack Overflow用户
提问于 2017-03-04 02:47:02
回答 2查看 1.4K关注 0票数 3

我正在使用Swift 3,Xcode 8.2。

我有一个视图控制器,上面有一个按钮。当按下按钮时,它将运行下面的buttonPressed函数。它启动了一个异步作业,它需要几秒钟才能完成,在此期间,旋转装置的活动指示器会弹出。工作完成后,我希望活动指示符解散,视图控制器也解散它最初来自的VC。

代码语言:javascript
运行
复制
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-Reader27710 27710:6869686 transitionViewForCurrentTransition未设置,演示过程中表示控制器被解职?(<_UIAlertControllerAlertPresentationController: 0x109e3b190>)

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-04 02:54:22

一次执行每个人的转换。

代码语言:javascript
运行
复制
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秒的时间来完成它的操作。
  • 现在,在下一行中,您将尝试取消呈现当前视图控制器的( ** )视图控制器。(在您的示例中,( ** )视图控制器也由其他视图控制器提供。)因此,在一小部分秒/毫秒内( ** )视图控制器也会尝试用动画将它排除在外。
  • 此时,您的当前视图控制器正在被取消,并且(**)视图控制器也将开始退出操作。因此,这两个操作在主执行线程上相互冲突。结果变成了一个问题,你正面临着。

另外,共享块的代码。

代码语言:javascript
运行
复制
self.doSomeJobProcessing()

在这里共享,如果您已经在这里设置了任何其他视图/控制器转换操作。

票数 3
EN

Stack Overflow用户

发布于 2017-03-04 03:10:10

请记住,当您分派异步时,通常是向后台线程分派以防止UI阻塞。屏幕上的所有组件都需要在主线程上进行修改。因此,从主线程启动进度旋转器,将您的繁重工作分派到后台,然后重新分派到您想要的主线程。this.dismissviewcontroller:animated

将很快用代码进行更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42591480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档