我有一个辅助viewController,允许我从相机胶卷中删除图像。问题是,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
})
答案 0 :(得分:6)
这是文档所说的:
Photos执行更改块和完成处理程序块 在任意串行队列上。要更新应用的用户界面,请执行以下操作: 更改,将工作分配到主队列。
导航控制器需要从主线程执行,因此您需要将调用包装为类似
的内容dispatch_async(dispatch_get_main_queue()) {
navigationController.popViewControllerAnimated(true)
}
答案 1 :(得分:5)
Swift 3
DispatchQueue.main.async() {
self.navigationController?.popViewController(animated: true)
}