应该是OS X Swift的决定
问题 - 应用程序在代表NSViewController
有两个NSViewController
- 问题,当我在它们之间进行转换时 - 应用程序已关闭,代表NSViewControllers
时出现错误。
使用presentViewController和dismissViewController的方法。
此处有问题的示例项目:git@github.com:IgorCova/Freelance.git
如何重现错误(仅限优胜美地):
1.我打开第一个NSViewController
2.我打开第二个NSViewController后
3.接下来,回到第一个(解雇第二个)
4.然后再次尝试打开第二个NSViewController - 最后,应用程序崩溃(但在El Capitan上一切正常,没有错误)
答案 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)
}