Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ViewController OS X(Swift)上的应用程序崩溃_Swift_Macos_Dismiss_Nsviewcontroller_Osx Yosemite - Fatal编程技术网

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

ViewController OS X(Swift)上的应用程序崩溃,swift,macos,dismiss,nsviewcontroller,osx-yosemite,Swift,Macos,Dismiss,Nsviewcontroller,Osx Yosemite,这应该是OSX Swift的决定 问题-应用程序在RepresenteNSViewController上崩溃 有两个NSViewController–当我在它们之间进行转换时出现问题-应用程序关闭,表示NSViewController 它们使用presentViewController和dismissViewController的方法 此处有问题的示例项目: 如何重现错误(仅限约塞米蒂): 1.我打开第一个NSViewController 2.打开第二个NSViewController后 3.接

这应该是OSX Swift的决定

问题-应用程序在Represente
NSViewController上崩溃

有两个
NSViewController
–当我在它们之间进行转换时出现问题-应用程序关闭,表示
NSViewController

它们使用presentViewController和dismissViewController的方法

此处有问题的示例项目:

如何重现错误(仅限约塞米蒂):
1.我打开第一个NSViewController
2.打开第二个NSViewController后
3.接下来,返回第一个(第二个)

4.然后再次尝试打开第二个NSViewController-最后,应用程序会崩溃(但在El Capitan上一切正常)

在您的
第二个ViewController的viewDidLoad()中,您将自己注册为“dismisSecondViewController”通知的观察者:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(SecondViewController.dismisSelf),
                                                           name:"dismisSecondViewController",
                                                         object: nil)
问题是,在10.11之前,您必须先注销任何观察者,然后才能解除分配(即从内存中删除),否则NSNotificationCenter将继续向现在占用此解除分配内存区域的对象发送消息-它可能是垃圾或其他不响应这些消息的对象。由于视图控制器在切换时显然会被解除分配,因此这是您的问题

因此,修复非常简单:将以下
deinit
方法添加到
SecondViewController
类中

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

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