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

Crash application on dismiss ViewController OS X (Swift)

应该是 OS X Swift

的决定

问题 - 应用程序在表示 NSViewController

时崩溃

有两个 NSViewController – 问题是,当我在它们之间进行转换时 – 应用程序因表示 NSViewControllers.
上的错误而关闭 这里使用了presentViewController和dismissViewController的方法。

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

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

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

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

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

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

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