Z Swift 4, Apple informuje, za pośrednictwem nowego ostrzeżenia kompilatora, że unikamy używania #selector
w tym scenariuszu. Poniżej znajduje się znacznie bezpieczniejszy sposób do osiągnięcia tego celu:
pierwsze, stworzenie leniwe var które mogą być wykorzystane przez zgłoszenia:
lazy var didBecomeActive: (Notification) -> Void = { [weak self] _ in
// Do stuff
}
Jeśli wymagają rzeczywistej powiadomienie być włączone, wystarczy zastąpić _
z notification
.
Następnie skonfigurowaliśmy powiadomienie, aby obserwować, jak aplikacja staje się aktywna.
func setupObserver() {
_ = NotificationCenter.default.addObserver(forName: .UIApplicationDidBecomeActive,
object: nil,
queue: .main,
using: didBecomeActive)
}
Dużą zmianą jest to, że zamiast wywoływania #selector
, obecnie nazywamy var utworzonego powyżej. Może to wyeliminować sytuacje, w których pojawią się niepoprawne błędy selektora.
Na koniec usuwamy obserwatora.
func removeObserver() {
NotificationCenter.default.removeObserver(self, name: .UIApplicationDidBecomeActive, object: nil)
}
Doskonały. Nie myślałem o użyciu 'NSNotificationCenter'. Dziękuję Ci! – Calvin
Po prostu literówka w tym wierszu kodu (brak "nazwy"): [[NSNotificationCenter defaultCenter] addObserver: selektor własny: @selector (someMethod :) name: UIApplicationDidBecomeActiveNotification object: nil]; – Johnus
@Johnus - dzięki za połów. Zaktualizowano moją odpowiedź. –