关闭以编程方式呈现在嵌套在 NavigationController 中的 ViewController 中的 ViewController 崩溃,但并非每次
Posted
技术标签:
【中文标题】关闭以编程方式呈现在嵌套在 NavigationController 中的 ViewController 中的 ViewController 崩溃,但并非每次【英文标题】:Dismiss ViewController which was programmatically presented in ViewController nested in NavigationController crashes, but not every time 【发布时间】:2016-12-03 14:57:35 【问题描述】:当我尝试关闭以编程方式呈现在嵌套在 NavigationController 中的 ViewController 中的 ViewController 时,我似乎得到了一个
libc++abi.dylib:以 NSException 类型的未捕获异常终止
每隔一段时间,不提供更多信息。
我的 ViewController 以模态方式呈现在嵌套的 ViewController 之上:
class RefreshController: UIViewController
@IBOutlet var label: UILabel!
@IBOutlet var main: UIView!
@IBOutlet var spinner: UIActivityIndicatorView!
override func viewDidLoad()
super.viewDidLoad()
spinner.startAnimating()
label.text = .localized("refreshing") + " ..."
main.layer.cornerRadius = 5
public func hideRefresh(_ contr: UIViewController, completion: @escaping (() -> Swift.Void))
contr.presentedViewController?.dismiss(animated: true, completion:
refreshController = nil
completion()
)
class func showRefresh(_ contr: UIViewController!, completion: @escaping (() -> Swift.Void))
refreshController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "refreshController") as! RefreshController
contr.present(refreshController, animated: true, completion:
completion()
)
我有一个全局变量 refreshController,当它显示为每次都可以访问它时,它将自己定义为当前呈现的控制器。
在我调用的嵌套 ViewController 中:
refreshController.hideRefresh(self, completion:
//code goes here, after the controller dismissed
(完成部分是由于动画,有时会与应该呈现的 UIAlerts 冲突)
有人有这方面的经验吗?还是只是最新 ios 10.2 (14C82) beta 中的一个 bug?
【问题讨论】:
【参考方案1】:在呈现的视图控制器上调用dismiss
,而不是在呈现的视图控制器上:
public func hideRefresh(_ contr: UIViewController, completion: @escaping (() -> Swift.Void))
// instead of contr.presentedViewController?.dismiss...
contr.dismiss(animated: true, completion:
refreshController = nil
completion()
)
【讨论】:
我得到它的工作,我认为这是由于调用的顺序以上是关于关闭以编程方式呈现在嵌套在 NavigationController 中的 ViewController 中的 ViewController 崩溃,但并非每次的主要内容,如果未能解决你的问题,请参考以下文章
在 indexpath.item 以编程方式呈现 UIViewController(嵌入在 UITabBarController 中)