Ich habe eine App mit 3 Viewcontrollern, die auf einen Navigationscontroller-Stack geschoben werden.NotificationCenter: BAD_ACCESS wenn Benachrichtigung postet
(A) -> (B) -> (C)
(A)
Register für Benachrichtigungen in viewWillAppear
:
NotificationCenter.default.addObserver(self, selector: #selector(reload), name: NSNotification.Name(rawValue: "DATA_CHANGED"), object: nil)
und (A
) austrägt in viewWillDisappear
:
NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "DATA_CHANGED"), object: nil)
Zusätzlich (A)
abmeldet in deinit()
aber nie aufgerufen.
Jetzt (B)
wird auf Stapel geschoben und registriert/Abmelden für das gleiche Ereignis wie (A)
.
Jetzt wird (C)
auf Stapel geschoben, der eine Berechnung auslöst und wieder auf (B)
zurückspringt. Einige Zeit später, während (B)
wird die Berechnung dargestellt ist abgeschlossen und eine Meldung wird ausgelöst:
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "DATA_CHANGED"), object: nil)
Aber dies führt zu einer
Gewinde 1: EXC_BAD_ACCESS
Ich bin sicher, dass Die Benachrichtigung ist das Problem, weil ich den Namen der Benachrichtigung falsch geschrieben habe und dann kein Absturz aufgetreten ist. Auch (A)
und (B)
sind immer noch nicht freigegeben, da sie auf dem Stapel leben. Ich konnte im Profiler keinen Zombie finden.
Irgendeine Idee, was könnte das Problem sein?
Ich bin mit XCode 9beta6 und Swift 4.
Bitte bearbeiten Sie Ihre Frage, um den Stack-Trace anzuzeigen. – Paulw11
Es gibt keine Stack-Trace. Ich bekomme EXC_BAD_ACCESS nur als rote Linie. – netshark1000
Legen Sie den Ausnahmeblockpunkt fest, um die betroffene Zeile, den tatsächlichen Ausnahmegrund und den Stack-Trace abzurufen. Höchstwahrscheinlich ist die Signatur des Selektors falsch. – vadian