Mam UIApplicationDelegate
protokół w mojej głównej klasie AppDelegate.m, ze applicationDidBecomeActive
zdefiniowaną metodą.
Chcę wywołać metodę, gdy aplikacja powróci z tła, ale metoda znajduje się w innym kontrolerze widoku. Jak mogę sprawdzić, który kontroler widoku jest aktualnie wyświetlany w applicationDidBecomeActive
metodzie, a następnie wywołać metodę w tym kontrolerze?
NSNotificationCenter
. Dziękuję Ci!Odpowiednik Swift 3, 4:
dodawanie obserwatora
usunięcie obserwatora
oddzwonić
źródło
viewDidLoad
lubviewWillAppear:animated
na przykład. I możesz usunąć obserwatora, gdy nie potrzebujesz już powiadomień lub gdy instancja obserwatora zostanie zwolniona w metodzie deinitOdpowiednik Swift 2 :
źródło
removeObserver
Swiftdeinit
:.Szybki 4.2
Dodaj obserwatora
Usuń obserwatora
Obsługa zdarzenia
źródło
W Swift 4 Apple informuje za pośrednictwem nowego kompilatora ostrzeżenie, że unikamy korzystania z
#selector
tego w tym scenariuszu. Następujący sposób jest o wiele bezpieczniejszy.Najpierw utwórz leniwy war, którego można użyć w powiadomieniu:
Jeśli wymagają rzeczywistej powiadomienie być włączone, po prostu wymienić
_
sięnotification
.Następnie skonfigurujemy powiadomienie, aby obserwować, czy aplikacja stanie się aktywna.
Duża zmiana polega na tym, że zamiast wywoływać a
#selector
, nazywamy teraz var utworzony powyżej. Może to wyeliminować sytuacje, w których występują nieprawidłowe awarie selektora.Wreszcie usuwamy obserwatora.
źródło
#selector
może wywołać metodę zadeklarowaną jako@objc
atrybut w Swift 4.removeObserver(self
ponieważ ja nie został przypisany podczas dodawania obserwatora. Powinieneślet observer = NotificationCenter.default.addObserver
wtedyremoveObserver(observer
@objc
. Jednak gdy próbuję, pojawia się ostrzeżenie w konsoli (Xcode 11.3.1 (11C504), Swift 13.3): Nie można zakończyć BackgroundTask: nie ma zadania w tle z identyfikatorem. Nawet jeśli zapisam obserwatora w zmiennej jako NSObjectProtocol.@objc
użyję wariantu.Szybki 5
źródło
Sposób łączenia:
źródło