UINavigationcontroller soll Daten zurückgeben

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

  • UINavigationcontroller soll Daten zurückgeben

    Hallo,

    ich habe hier ein Problem welches ich einfach nicht gelöst bekomme.
    Glaubt mir, so eine harte Nuss hatte ich noch nie…

    Da ich nach Tagen? aber nicht weiter komme, versuche ich hier mein Glück :)

    Nachfolgend eine hoffentlich verständliche Beschreibung.


    Ich lade einen RootViewController über einen NavigationsController.

    Hinter dem RootViewController, welcher ein UITableViewController ist, stecken weitere Controller. Alles in die Richtung hinter dem RootViewController funktioniert. Z.B. das Auslösen über die Methode "didSelectRowAtIndexPath".

    Wird der RootViewController verlassen soll er sein erstelltes Dictionary zurück an den MainViewController geben. Von dort wird später ein anderer Controller darauf zugreifen.

    Eigentlich soll er direkt das Dictionary aus dem MainViewController verwenden. Dazu benötigt ich aber auf den MainViewController Zugriff.
    Und genau das ist mein Problem!
    Dat klappt einfach net!


    Derzeit führe ich im RootViewController ein eigenes Dictionary. Damit habe ich im Moment die Funktionalität des RootViewControllers abgedeckt. Sonst würde alle weiteren Aktionen nicht funktionieren.



    Zum Verständnis:
    Zwischen dem MainViewController und dem RootViewController steckt noch ein ConfigViewController.
    D.h. im MainViewController wird der ConfigViewController gestartet. In diesem kann ich auf das Haupt-Dictionary im MainViewController zugreifen.

    Aus dem ConfigViewController wird jetzt über die Methode loadPhoto der Navigationscontroller geladen, der sich mit dem RootViewController initialisiert.

    Quellcode

    1. - (IBAction)loadPhoto
    2. {
    3. UINavigationController *controller = [[[UINavigationController alloc] initWithRootViewController:[[RootViewController alloc] init]] autorelease];
    4. controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    5. [self presentModalViewController:controller animated:YES];
    6. }



    Der Zugriff vom ConfigViewController auf den MainViewController funktioniert über eine Property.

    Quellcode

    1. @property (nonatomic, assign) MainViewController *mainViewController;



    Im MainViewController starte ich den ConfigViewController folgendermaßen:

    Quellcode

    1. ConfigViewController *controller = [[[ConfigViewController alloc] init] autorelease];
    2. controller.mainViewController = self;
    3. controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    4. [self presentModalViewController:controller animated:YES];


    So weit so gut.

    Wenn ich den Aufruf in loadPhoto so mache wie beim ConfigViewController, komme ich an das Dictionary im MainViewController dran.
    Aber...
    Dann besteht das Problem dass einmal mein UITableViewController im RootViewController denn kompletten Screen vom iPhone nutzt. D.h. nix mehr mit Navigationsbar, etc.
    Außerdem erfolgt dann keine Reaktion mehr auf das Betätigen einer Zeile im UITableViewController. Delegate, aber wie?



    Leider bekomme ich weder das eine noch das andere komplett hin.


    Die Durchführung mit dem UINavigationsController scheint mir einfacher zu sein. Allerdings komme ich da ja auch nicht weiter :(

    Also gerade ganz schlechte Karten...



    Jetzt hoffe ich darauf dass mir jemand bei dem Problem helfen kann.

    Mittlerweile könnte ich auch sagen beten.



    Gruß
    Chris
  • Du könntest die Daten z.B. zentral im AppDelegate ablegen. Von da kannst du mit jedem Controller darauf zugreifen.

    Quellcode

    1. AppDelegate * theAppDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    2. NSDictionary * myDict = [theAppDelegate myDict];


    Dabei aber nicht vergessen, dein Dictionary im AppDelegate zu initialisieren
  • Danke für den Tip. Das hatte ich in der Apple Doku gelesen.

    Scheint mir aber auch eine unschöne Lösung zu sein. Ist vielleicht aber Ansichtssache.

    Eine andere Möglichkeit ist es im RootViewController in eine Datei zu schreiben. Ich werde es später so möglicherweise verwenden. Allerdings versuche ich ja immer wieder etwas zu lernen :)
  • Nur mal so am Rande. RootViewController heißt normaler RootViewController weil er das Root der ViewController ist. Sprich da gibt es keinen ViewController mehr davor. Ich würde den mal umbenennen.

    Ich würde das Modell auch in das AppDelegate legen. Allerdings funktioniert das nur solange wie nicht mehrere Threads schreibend darauf zugreifen.

    GRuß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)