2010-08-10 14 views
8

Ich habe eine UITableView, die Remote-Daten aus dem Netzwerk lädt. Ich habe Logik in viewWillAppear, um die Daten zu aktualisieren, wenn sie aufgrund von Statusänderungen und einer TTL für den Datensatz benötigt werden. Dies funktioniert in einer App "Sitzung", ist jedoch nicht wirksam, wenn der Benutzer die App in den Hintergrund verlagert und später direkt in diese Ansicht zurückspeichert.Reagieren Sie auf ApplicationWillEnterForeground in einer UIView

Was ich finde ist, dass, wenn die App in den Vordergrund in iOS4 wiederhergestellt wird - viewWillAppear wird nicht in der Ansicht aufgerufen - ich kann völlig verstehen, warum dies von Entwurf ist. Gibt es einen anderen UIView-Delegierten, den ich nutzen sollte? Ich habe nichts in den Dokumenten gesehen.

Da willEnterForeground im App-Delegaten verfügbar ist, ist der beste Weg, dies zu behandeln, eine Benachrichtigung vom App-Delegaten auf die Ansicht auslösen? Fehle mir eine direktere und elegantere Art, dies in einer UIView zu erfassen?

Danke für irgendwelche Tipps.

Antwort

16

Sie haben Recht mit den Delegiertenanrufen, aber für das, was Sie tun, klingt es für mich so, als würden Sie Ihre Netzwerkaktivität basierend auf den Methoden und applicationWillResignActive:, die beide auf dem App-Delegaten sind, unterbrechen und fortsetzen.

In Antwort auf Ihre Frage zu einem direkteren Weg, diese Benachrichtigungen in Ihrem UIView fängt, wenn Sie den AppDelegate bequemen Zugang nicht haben könnten Sie register for notification von UIApplicationDidBecomeActiveNotification und UIApplicationWillResignActiveNotification über das Standard-Benachrichtigungszentrum. Das trennt Sie etwas davon, den Anwendungsdelegaten mit Ihrer Ansicht zu koppeln.

+0

Vielen Dank. Auf den Zeiger für Aktiv/Inaktiv ist das vollkommen sinnvoll. Es war albern, an eine benutzerdefinierte Benachrichtigung vom App-Delegierten an den Viewcontroller zu denken. Danke, dass Sie darauf hingewiesen haben, dass Systembenachrichtigungen darauf warten, um dies abzudecken. Ich werde aufhören, Dinge jetzt zu hart zu machen :) – Nick

+1

swift 3: 'NotificationCenter.default.addObserver (self, Selektor: #selector (self.applicationDidBecomeActive), Name: NSNotification.Name.UIApplicationDidBecomeActive, Objekt: nil)' – Tony

Verwandte Themen