Problem beim Rücknavigieren in einem UINavigationController mit dem BackBarButton

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem beim Rücknavigieren in einem UINavigationController mit dem BackBarButton

    Ich habe mehrere Views, durch die ich mit einem UINavigationController mit PushViewController vorwärts und mit dem Standart-Backbutton zurück navigiere.
    Jetzt meine Frage: tritt bei der mit Back-Button verlassenen View kein ViewDidUnload auf?
    Falls das so ist, ich aber diese View in jedem Fall unloaden möchte - ist meine einzige Möglichkeit, den Standart-Backbutton durch einen eigenen zu überschreiben (inkl. eigenem Code (PopViewControllerAnimated))?
    Oder habe ich etwas falsch gemacht / falsch verstanden?
  • Die Frage ist WARUM willst du den entladen wenn das System das anscheinend nicht für nötig hält ? Das wird ja schließelich mit Absicht noch gehalten, weil anscheinend genug Speicher da ist und der Anwender dadurch schneller wieder zu der Seite zurück kehren kann wenn er möchte.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Hi Claus

    Aus zwei Gründe:
    1) meine View besteht nur aus einer ScrollView, sämtliche Objekte werden programmatisch erstellt, in Abhängigkeit vom aufrufenden View
    2) über ViewWillAppear/ViewDidAppear bekomme ich nicht raus, ob ich 'viewhierarchisch' gesehen von unten oder oben auf meinen View komme

    Habe ich es aber richtig verstanden, dass ich keinen Einfluss darauf habe, wann ein View entladen wird?

    Vielen Dank schon mal für Deine schnelle Antwort,
    Tom
  • Nein du hast keinen Einfluß darauf.

    Wenn es wirklich wichtig ist ob du "von oben oder von unten" auf den View kommst ist das eh schon sehr merkwürdig. Ausserden würde das auch nicht mit dem didiLoad/didUnload klappen. Es kann nämlich auch gut sein, dass das System den Unload aufruft obwohl dein View Controller darüber aktiv ist. Es sei denn Du hast ihn speziell retianed, was ich aber nicht unbedingt glaube.

    Warum macht es einen Unterschied von wo der Controller angesprungen wird ?

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Wenn ich von "unten" komme, muss ich den Objekte der View ggf. neu erstellen (in Abhängigkeit vom aufrufenden View), wenn ich von "oben" komme, muss ich lediglich die Daten aktualisieren.

    Also macht der Backbutton nicht das gleiche wie PopViewControllerAnimated? Das ist schade...
  • hm verstehe ich immer noch nicht.

    Was ist der Unterschied zwischen Daten aktualisieren und Objekte neu erstellen ?

    Ein ViewController zeigt Daten an. Dafür ist er da. Beliefert wird er mit diesen Daten von einem eigenen DatenController. Das Aktualisieren der Daten macht dabei der DatenController und nicht der ViewController denn der weiß ja nicht was geändert wurde. Das weiß nur der DatenController.

    Schau Dir mal das MVC Modell an und überleg ob Du nicht doch dein Kozept noch einmal von Grundauf ordentlich machen willst.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Ach, ich habe verstanden, was ich falsch verstanden habe:
    auch wenn ich beim Rücknavigieren kein ViewDidUnload sehe, beim erneuten Aufruf mit PushViewController wird trotzdem ViewDidLoad ausgeführt. Davon bin ich nicht ausgegangen. Ich dachte, kein ViewDidUnload, also auch kein ViewDidLoad.

    (Und in meinem Datencontroller hatte ich noch einen damit perfekt harmonierenden Fehler = meine Verwirrung war perfekt!)
  • TomFlex schrieb:

    auch wenn ich beim Rücknavigieren kein ViewDidUnload sehe,

    viewDidUnload wird nur in einer „low-memory condition“ aufgerufen. Wird der ViewController ganz normal released (zum Beispiel durch zurücknavigieren in einem NavigationController), wird der kontrollierte View trotzdem aus dem Speicher entfernt. In dem Fall wird aber viewDidUnload nicht mehr aufgerufen.

    Michael