Methodenaufruf aus einem anderen ViewController führt in die ViewDidLoad.

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

  • Methodenaufruf aus einem anderen ViewController führt in die ViewDidLoad.

    Hallo,

    ich habe folgendes Problem:

    In der ViewDidLoad von dem ViewController_1 rufe ich die Methode_A auf.
    Soweit klappt das alles ;)

    Jetzt bin ich im ViewController_2 und fahre diesen, nach Druck auf einen Button, in der IBAction_A wieder mit

    [self dismissModalViewControllerAnimated: YES];

    heraus.

    Nachdem ich das gemacht habe möchte ich nochmal die Methode_A aufrufen.
    Also schreibe ich in die IBAction_A :

    ViewController_1 *controller = [[ViewController_1 alloc] init];

    [controller methode_A];

    [controller release];

    Das Problem ist jetzt, dass wenn ich das mache, nicht nur die Methode_A sondern auch noch einmal die ViewDidLoad des ersten ViewControllers aufgerufen wird.
    Also wird die Methode_A zweimal aufgerufen.

    Lasse ich den Methodenaufruf in der IBAction weg, wird die ViewDidLoad aber nicht aufgerufen...

    Wie kann ich jetzt dafür sorgen, dass die Methode_A nur einmal aufgerufen wird?
    Sprich, dass ich nicht wieder in der ViewDidLoad lande?

    Vielen Dank schon mal im Voraus.
  • Du solltest vielleicht erst einmal etwas zum Thema Programmierung und Objective-C lesen.

    Mit alloc erzeugst Du ein neues des Objekt der Klasse ViewController_1. Ich gehe mal davon aus, dass Du die Methode methode_A in dem bereits bestehendem Objekt der Klasse ViewController_1 aufrufen möchtest und nicht in irgendeinem neuen Objekt dieser Klasse, richtig?

    Dann solltest Du verstehen, was Objekte sind, wie man diese erzeugt und wie man sich die Referenz zu einem Objekt merkt oder diese Referenz an andere Objekte übergibt. Für Deinen o.a. Anwendungsfall könnten auch Delegates und Notifications interessant sein.
  • Was Objekte sind weiß ich...
    Und es ist gewollt, dass ich ein neues Object vom Typ ViewController_1 erzeuge, da ich ja in ViewController_2 bin und die Methode_A sich in dem ersten befindet.

    Die Idee mit den Notifications ist genau das was ich brauche...
    Daran hatte ich gar nicht gedacht.

    Vielen Dank für deine Hilfe ;)
  • Doch, der ViewController_2 wird aus dem Ersten aufgerufen...
    Und besteht auch noch, dass ist mir klar...
    Der ViewController_2 wird ja so gesehen nur über den Ersten gelegt...

    Aber wie soll ich den darauf dann zu greifen?
    Ich dachte, dass ich mir im ViewController_2 ein Object vom ViewController_1 erstellen muss, um auf seine Objekte und Methode zugreifen zu können...
  • Über eine property, ein Delegate oder eine Notifikation.

    Hat Dan schon alles gesagt. Genauso wie das es dir an den elementaren Grundlagen fehlt.

    Sorry aber du solltest erst einmal die Basics erlernen.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Hab es jetzt so gemacht:

    ViewController_1:

    - (void)viewDidLoad
    {
    [super viewDidLoad];

    //Observer anmelden
    [[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(myMethod)
    name:@"BeginnAnimationAgain"
    object:nil];
    .
    .
    .
    }

    ViewController_2:

    - (IBAction)backButtonPressed: (id)sender {

    [self dismissModalViewControllerAnimated:YES];

    [[NSNotificationCenter defaultCenter] postNotificationName: @"BeginnAnimationAgain" object:nil];
    }