这应该是一个关于OS X Swift的决定
问题-应用程序在表示时崩溃NSViewController
有两个NSViewController–问题是,当我在它们之间进行转换时-应用程序在representNSViewControllers上出错而关闭。
这里使用presentViewController和dismissViewController方法。
这里有问题的示例项目:[email protected]:IgorCova/Freelance.git
如何重现错误(仅限优胜美地):
一。我打开第一个NSViewController
2。打开第二个NSViewController之后
三。下一步,返回第一个(关闭第二个)
四。然后再次尝试打开第二个NSViewController—最后,应用程序崩溃了(但在El Capitan上,一切正常)

最佳答案

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)
}

10-08 17:49