applicationDidBecomeActive Handhabung - „Wie kann ein View-Controller reagieren auf die App aktiv zu werden?“

StackOverflow https://stackoverflow.com/questions/3639859

Frage

Ich habe das UIApplicationDelegate Protokoll in meinem Haupt AppDelegate.m Klasse, mit der applicationDidBecomeActive Methode definiert.

Ich möchte eine Methode aufrufen, wenn die Anwendung kehrt aus dem Hintergrund, aber die Methode in einem anderen View-Controller ist. Wie kann ich zur Zeit des View-Controller überprüfen ist in dem applicationDidBecomeActive Verfahren zeigt und dann innerhalb dieses Controller einen Aufruf eine Methode machen?

War es hilfreich?

Lösung

Jede Klasse in Ihrer Anwendung kann für verschiedene Meldungen in der Anwendung ein „Beobachter“ werden. Wenn Sie (oder Last) Ihre View-Controller erstellen, werden Sie es als Beobachter registrieren möchten für die UIApplicationDidBecomeActiveNotification und angeben, welche Methode, die Sie aufrufen möchten, wenn diese Benachrichtigung an die Anwendung gesendet wird.

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(someMethod:)
                                             name:UIApplicationDidBecomeActiveNotification object:nil];

Vergessen Sie nicht, sich selbst zu reinigen! Denken Sie daran, sich als Beobachter zu entfernen, wenn Sie Ihre Ansicht weggeht:

[[NSNotificationCenter defaultCenter] removeObserver:self 
                                                name:UIApplicationDidBecomeActiveNotification
                                              object:nil];

Weitere Informationen über die Notification Center .

Andere Tipps

Swift 3, 4-äquivalent:

Hinzufügen Beobachter

NotificationCenter.default.addObserver(self,
    selector: #selector(applicationDidBecomeActive),
    name: .UIApplicationDidBecomeActive, // UIApplication.didBecomeActiveNotification for swift 4.2+
    object: nil)

Entfernen Beobachter

NotificationCenter.default.removeObserver(self,
    name: .UIApplicationDidBecomeActive, // UIApplication.didBecomeActiveNotification for swift 4.2+
    object: nil)

Rückruf

@objc func applicationDidBecomeActive() {
    // handle event
}

Swift 2-Äquivalent :

let notificationCenter = NSNotificationCenter.defaultCenter()

// Add observer:
notificationCenter.addObserver(self,
  selector:Selector("applicationWillResignActiveNotification"),
  name:UIApplicationWillResignActiveNotification,
  object:nil)

// Remove observer:
notificationCenter.removeObserver(self,
  name:UIApplicationWillResignActiveNotification,
  object:nil)

// Remove all observer for all notifications:
notificationCenter.removeObserver(self)

// Callback:
func applicationWillResignActiveNotification() {
  // Handle application will resign notification event.
}

Swift 4.2

Add Beobachter -

NotificationCenter.default.addObserver(self, selector: #selector(handleEvent), name: UIApplication.didBecomeActiveNotification, object: nil)

Remove Beobachter -

NotificationCenter.default.removeObserver(self, name: UIApplication.didBecomeActiveNotification, object: nil)

Handle Ereignis -

@objc func handleEvent() {
}

Mit Swift 4, rät Apple-über eine neue Compiler-Warnung, dass wir die Verwendung von #selector in diesem Szenario zu vermeiden. Im Folgenden ist eine viel sicherere Weg dies zu tun:

Zuerst einen faulen var erstellen, die von der Anmeldung verwendet werden können:

lazy var didBecomeActive: (Notification) -> Void = { [weak self] _ in
    // Do stuff
} 

Wenn Sie die tatsächliche Anmeldung erforderlich enthalten sein, ersetzen Sie einfach den _ mit notification.

Als nächstes einrichten wir die Benachrichtigung für die App zu beobachten, aktiv zu werden.

func setupObserver() {
    _ = NotificationCenter.default.addObserver(forName: .UIApplicationDidBecomeActive,
                                               object: nil,
                                               queue:.main,
                                               using: didBecomeActive)
}

Die große Veränderung ist hier, dass stattdessen eine #selector aufzurufen, jetzt haben wir die var oben erstellt nennen. Dies kann Situationen beseitigen, in denen Sie ungültige Wähler Abstürze erhalten.

Schließlich haben wir die Beobachter entfernen.

func removeObserver() {
    NotificationCenter.default.removeObserver(self, name: .UIApplicationDidBecomeActive, object: nil)
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top