关闭ViewController OS X(Swift)的崩溃应用程序

时间:2016-08-15 19:22:53

标签: swift macos dismiss nsviewcontroller yosemite

应该是OS X Swift的决定

问题 - 应用程序在代表NSViewController

时崩溃

有两个NSViewController - 问题,当我在它们之间进行转换时 - 应用程序已关闭,代表NSViewControllers时出现错误。
使用presentViewController和dismissViewController的方法。

此处有问题的示例项目:git@github.com:IgorCova/Freelance.git

如何重现错误(仅限优胜美地):
1.我打开第一个NSViewController
2.我打开第二个NSViewController后 3.接下来,回到第一个(解雇第二个)
4.然后再次尝试打开第二个NSViewController - 最后,应用程序崩溃(但在El Capitan上一切正常,没有错误)

1 个答案:

答案 0 :(得分:2)

SecondViewController的viewDidLoad()中,您将自己注册为" dismisSecondViewController"的观察者。通知:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(SecondViewController.dismisSelf),
                                                           name:"dismisSecondViewController",
                                                         object: nil)

问题是在10.11之前你必须取消注册任何观察者才会被解除分配(即从内存中删除),否则NSNotificationCenter将继续向现在占用此解除分配的内存区域的内容发送消息 - 它可能是垃圾或其他不响应这些消息的对象。由于您的视图控制器在切换时会明显取消分配,因此这是您的问题。

因此修复很简单:将以下deinit方法添加到SecondViewController

deinit {
    NSNotificationCenter.defaultCenter().removeObserver(self)
}