Wie kann ich einen View-Controller einrichten, um die Felder in der Ansicht nur zu aktualisieren, wenn er auf einen Navigationscontroller gedrückt wird und die Objekte freigibt, wenn er aus den Ansichten des Navigationscontrollers herausgeklappt wird.Laden/Entladen einer Ansicht erzwingen
Mein Ziel ist es, dass für einen View-Controller:
- Refresh Anzeige nur, wenn es auf dem Navigationscontroller Stapel
- Mitteilungen Daten gedrückt wird, wenn es aus dem Navigationscontroller Stapel
- Wiederverwendung des geknallt wird Controller so viel wie möglich (XIB-Dateien Lade/Entlade-Overhead zu beseitigen)
Gibt es Delegate Methoden für viewWillBePushed:
und viewWillBePopped:
?
Beispiel
Lassen Sie uns sagen, ich habe drei Schichten der Ansichten:
Movies (MovieListController)
--> Movie Basic Info (MovieInfoController)
--> Movie Credits (MovieCreditsController)
Angenommen, wir haben eine Klasse Movie
jeden Film zu repräsentieren.
Hier möchte ich nur drei UIViewController
s haben, eine Instanz von jedem in der Laufzeit des Programms. So kann ich die gleiche MovieInfoController
für verschiedene Filme und ähnlich MovieCreditsController
wiederverwenden.
Allerdings möchte ich auch MovieInfoController
nur seine Ansicht Felder (z. B. Titel, Veröffentlichungsdatum, etc.) nur aktualisieren, wenn es auf dem Stapel geschoben wird. Die Implementierung der Anzeige in viewWillAppear
wird dazu führen, dass Felder aktualisiert werden, selbst wenn MovieCreditsController
aufgerufen wird.
Auch ich möchte MovieInfoController
, um seine Referenz auf Movie
, wenn es Pop und jedes potenziell große Objekt (z. B. Titelbild) freigegeben werden. Die Implementierung dieser Logik in viewWillDisappear
wird dazu führen, dass es die Daten freigibt, wenn es MovieCreditsController
auf den Stapel schiebt.
Ist das vernünftig? Gehe ich falsch herum?
Das ist eigentlich zu dem, was ich gerade mache, außer dass es 'drainFieldsInfo' anstelle von' setMovie: nil' heißt. Ich habe auf etwas Besseres gehofft. Trotzdem danke! – notnoop