2016-08-15 8 views
0

Es sollte eine Entscheidung über OS X SwiftCrash-Anwendung auf entlassen Viewcontroller OS X (Swift)

Problem sein - Anwendung abgestürzt auf NSViewController repräsentieren

Dort haben zwei NSViewController - das Problem, wenn ich einen Übergang zu tun dazwischen - die Anwendung, die mit dem Fehler auf geschlossen wurde, stellt NSViewControllers dar. Dort verwenden Sie die Methoden von presentViewController und disneyViewController.

Beispielprojekt mit Problem hier: [email protected]: IgorCova/Freelance.git

Wie den Fehler zu reproduzieren (auf Yosemite only): 1. Ich öffne erste NSViewController 2. Nachdem ich zweite öffnen NSViewController 3. Als nächste auf den ersten zurück (entlassen Sekunde) 4. Dann wieder versucht, einen zweiten NSViewController zu öffnen - am Ende die Anwendung zermalmt (Aber am El Capitan funktioniert alles ohne Fehler)

Antwort

1

in Ihrem SecondViewController 's viewDidLoad() Sie registrieren sich selbst als Beobachter für "disdisSecondViewController" Nr tifizierung:

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

Das Problem ist, dass vor 10.11 Sie austragen irgendwelche Beobachter haben, bevor sie freigegeben erhalten (d aus dem Speicher entfernt), andernfalls wird NSNotificationCenter weiterhin Nachrichten an etwas senden, das jetzt diese freigegebene Speicherregion belegt - es kann sich entweder um einen Papierkorb oder ein anderes Objekt handeln, das nicht auf diese Nachrichten reagiert. Da Ihre View-Controller beim Wechsel eindeutig deaktiviert werden, ist dies Ihr Problem.

So ist die Lösung ist einfach:

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

Vielen Dank folgende deinit Methode zu Ihrer SecondViewController Klasse hinzuzufügen! Es funktioniert gut –