2

我有一个辅助视图控制器,允许我从相机胶卷中删除图像。问题是,completionHandler 会像预期的那样触发,但 popViewController 实际上似乎并没有运行大约 8 秒。它肯定会触发,因为我可以看到可选输出。我检查了是否只是弹出,它运行正常。我检查了 viewWillDisapear 事件,它也触发得很晚,考虑到导航控制器尚未弹出当前 viewController 的视图,我预计会发生这种情况。

PHPhotoLibrary.sharedPhotoLibrary().performChanges({

    PHAssetChangeRequest.deleteAssets(assetsToDelete)
        return
    }, completionHandler: { success, error in
       if success {
           println("success")
           println(navigationController.popViewControllerAnimated(true))
           println("so slow")
       }
       if let error = error {
           println(error)
       }
       return
})
4

2 回答 2

6

这就是文档所说的:

Photos 在任意串行队列上执行更改块和完成处理程序块。要因更改而更新应用的 UI,请将工作分派到主队列。

导航控制器需要从主线程执行,因此您需要将调用包装到类似

dispatch_async(dispatch_get_main_queue()) { 
    navigationController.popViewControllerAnimated(true)
} 
于 2015-08-05T03:11:46.903 回答
5

对于斯威夫特 3

DispatchQueue.main.async() {
    self.navigationController?.popViewController(animated: true)
}
于 2017-09-08T08:28:27.243 回答