Entfernen Observer Benachrichtigung Swift 3
Ich verwende Kugel von der Bibliothek für die Benachrichtigung (https://github.com/TakeScoop/Kugel/tree/swift-3.0). Ich möchte wissen, wie zu entfernen Beobachter und wo in meinem code . ich benutze Abmelden für Bibliothek und es passiert nichts
override func viewDidDisappear(_ animierten: Bool) {
super.viewDidDisappear(animated)
Kugel.unsubscribe("SleepMode")
Kugel.unsubscribe("SleepModeSynchroMode")
Kugel.unsubscribe(self, name: NSNotification.Name(rawValue: "SleepMode"), object: nil)
Kugel.unsubscribe(self, name: NSNotification.Name(rawValue: "SleepModeSynchroMode"), object: nil)
NotificationCenter.default.removeObserver(self, name: Notification.Name(rawValue: "SleepMode"), object: nil);
NotificationCenter.default.removeObserver(self, name: Notification.Name(rawValue: "SleepModeSynchroMode"), object: nil);
}
möchte ich entfernen, abonnieren, Benachrichtigung add ( observer ) wenn ich zurück in meine anderen anzeigen.
Ich benutze denit { }, aber die Meldung, dass nicht getötet .
Können Sie helpme
Tahnks
- Es sollte funktionieren, aber bitte versuchen Sie, diese - override func viewDidDisappear(_ animierten: Bool) { NotificationCenter.Standard.removeObserver(self) }
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alle, die falsch ist. Hier ist der richtige Weg, um zu entfernen Beobachter in Swift (gilt auch für Obj-C):
Laut apples Dokumentation, müssen Sie einen Verweis auf Ihre Betrachter! NSNotificationCenter addObserver Selbst ist nicht ein Beobachter, so
NotificationCenter.default.removeObserver(self, name: Notification.Name(rawValue: "SleepMode"), object: nil);
nicht tun.Was Sie tun müssen, ist:
Erweitern Sie die Benachrichtigung.Name für die Benachrichtigung: (wo Sie die post-Meldung)
Erstellen Sie einen schwachen Verweis auf Ihre Betrachter mit:
Erstellen Sie eine "addObserver" - Funktion, etwa so: (wo Sie wollen, hören Sie die Meldung)
Erstellen Sie eine "removeObserver" - Funktion:
Rufen Sie Ihren "addObserver" - Funktion aus, wo Sie es in Ihrem code sein (die meisten wohl von Ihrer
viewDidLoad
Methode)Rufen Sie die "removeObserver" - Funktion, wenn Sie fertig sind Sie zu hören, dass die Benachrichtigung.
Ein wichtiger Punkt hier ist, dass, wenn Sie haben einen extra starken Bezug zu Ihrer Klasse Umsetzung der Benachrichtigung und Sie "denken" der Beobachter entfernt ist, ist es aber nicht, dann ist die
guard
Umsetzung oben verhindert, dass Ihr code aus, indem Sie mehrere Beobachter. Dies ist insbesondere der Fall für einige Implementierungen von addObserver in derviewDidLoad
Funktion fehlt einremoveObserver
.Ein Beweis? fügen Sie einen Haltepunkt in der addObserver-Funktion in der Zeile, wo ordnen Sie die Beobachter und Bearbeiten Sie den Haltepunkt (Rechte Maustaste) wählen Sie dann
add action
und pickSound
und wählen Sie die optionAutomatically continue after evaluating actions
.Starten Sie Ihre app und gehen hin und her in den Blick, die die Beobachter. Wenn die Zahl der Zeit, die Sie hören, das Geräusch ist konstant, Sie sind fertig! Ansonsten sollte man hier den Ton zu erhöhen, indem man jedes mal, wenn Sie die Ansicht. Dort gehen Sie!
Wenn Ihre app Ziele iOS 9.0 und höher oder macOS 10.11 und später, die Sie nicht brauchen, um die Registrierung eines Beobachters in seiner Freigabe-Methode. Wenn Ihre app Ziele früheren Versionen, Sie benötigen, um einen Verweis auf das observer-Objekt und legt es anstelle von 'selbst', auch die Bibliothek, sagt seine schon Veraltet, warum verwendest du es?
Versuchen, und entfernen Sie den Betrachter in viewWillAppear
viewWillDisappear
oderviewDidDisappear
. Aber wenn @user1883993 's Antwort ist richtig, sollte es die akzeptierte Antwort.