ViewController mit geändertem Inhalt neu anzeigen

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

  • ViewController mit geändertem Inhalt neu anzeigen

    Hallo,

    meine App zeigt im Wesentlichen Dialoge und Listen an, die als XML vom Server geladen werden.
    In der ersten Version gab es einen UIViewController, der den Download und das Parsen übernahm und dann den ViewController für die Anzeige aufrief:

    Quellcode

    1. [self presentModalViewController: xmlController animated:YES];


    Dieser AnzeigeController hat in der Methode viewDidLoad das Füllen der eigenen Views mit Texten, Buttons etc. aufgerufen und das Ergebnis angezeigt.
    Wählt man eine Aktion aus, schloss sich dieser ViewController und das Spiel begann von vorn.

    Nun gab es weitere Vorbereitungen und Aktionen, die keine Änderung der Anzeige bewirkten.
    Ich hielt es für eine gute Idee, diese Aktivitäten in eine neue Klasse auszulagern und komme dann zu der Struktur:

    Startbild erzeugt die neue Klasse NextAction, abgeleitet von NSObject. Diese Klasse lädt die Daten und parst sie und ruft dann die Anzeige auf.
    Klappt perfekt, aber nur ein Mal! ;(

    Ich habe dann gesehen, dass viewDidLoad nicht mehr aufgerufen wird und habe das Füllen der Anzeige direkt aufgerufen. Nützt nichts.
    Dann habe ich die Anzeige beendet, bevor die Kontrolle an NextAction übergeben wird:

    Quellcode

    1. [self closeViewControllerWithAnimation:YES];
    2. [nextAction prepareAction:actionID];


    Nach dem Doanload wird der ViewController wieder erzeugt und angezeigt:

    Quellcode

    1. -(void)prepareXmlViewControllerForTask:(int)nextTask {
    2. // if (xmlViewController && nextTask == FormTaskFillViews) {
    3. if (true) {
    4. // [xmlViewController release];
    5. xmlViewController = nil;
    6. }
    7. if (xmlViewController == nil) {
    8. xmlViewController = [[XmlViewController alloc] initWithNextActionClass:self];
    9. }
    10. [xmlViewController setFormTask:nextTask];
    11. [xmlViewController processXmlData];
    12. [parentViewController presentModalViewController: xmlViewController animated:YES];
    13. }
    Alles anzeigen


    Selbst dann wird viewDidLoad nicht mehr aufgerufen! 8|

    Kann es sein, dass erst ein anderer ViewController aufgerufen werden muss, damit die Darstellung wirklich klappt?

    Oder was kannn ich sonst machen, damit meine Klasse NextAction den ViewController mit geändertem Inhalt anzeigen kann??
  • MCDan schrieb:

    Du kannst entweder immer einen neuen ViewController erzeugen und anzeigen oder Du verwendest den bereits erzeugten ViewController und aktualisierst vor dem erneuten Anzeigen des ViewControllers die angezeigten Daten.
    So war ja auch der Plan, aber die Aktualisierung greift nicht.

    ramo schrieb:

    Probiere mal deinen ViewController in

    Quellcode

    1. -(void)viewWillAppear:(BOOL)animated


    zu aktualisieren ? Diese Methode sollte immer aufgerufen werden ?
    Die Methode wird nicht aufgerufen!

    ABER:
    Es geht mit iOS 4.3; die Probleme gibt es nur mit 5.0! X(
    Ich starte in beiden Fällen die Anzeige mit

    Quellcode

    1. presentModalViewController: xmlViewController animated:

    aber beim Schließen unterscheide ich folgendermaßen:

    Quellcode

    1. if ([self respondsToSelector:@selector(presentingViewController)]) { // iOS >= 5.0
    2. [[self presentingViewController] dismissViewControllerAnimated:[[BIS_Common sharedInstance] shouldAnimate] completion:nil];
    3. } else { // iOS < 5.0
    4. [[self parentViewController] dismissModalViewControllerAnimated:[[BIS_Common sharedInstance] shouldAnimate]];
    5. }


    Weiterhin fällt mir gerade auf, dass unter V5.0 die kleine Anzeige, die ich mit einem UIAlertView für ein 1-2 Sekunden anzeige, ebenfalls nicht mehr sichtbar ist:

    Quellcode

    1. -(void)doShowToast:(NSString *) nachricht withTitle:(NSString *) newTitel withInterval:(NSTimeInterval)interval {
    2. UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:newTitel message:nachricht delegate:self cancelButtonTitle:nil otherButtonTitles:nil];
    3. [myAlertView show];
    4. [self performSelector:@selector(dismissAlert) withObject:nil afterDelay:interval];
    5. }


    Offensichtlich hat sich mehr geändert, als mir lieb ist...
    Hat jemand eine Idee, wie ich das unter iOS 5.0 hinbekommen kann?
  • Der Simulator war's!

    Es scheint gar kein iOS 5.0 Problem zu sein, sondern offensichtlich liegt es am Simulator!

    Ich habe ein iPhone 4S mit iOS 5.0.1 getestet und da funktionierte alles wie gewünscht. :D
    Wechsele ich dann auf den Simulator zurück, kommt wieder das Fehlverhalten.

    Hat jemand von euch ähnliche Erfahrungen?
    Gibt es ein Problem mit XCode 4.2.1?

    Ich habe versucht, die aktuelle Version 4.3.1 aus dem Appstore zu laden, aber da passiert gar nichts. Irgendwie hat Apple gerade ein Problem mit mir... X(
  • Dir ist aber schon klar, dass du nicht mehree Viewcontrolelr machen kannst wenn du deren Zeiger in einem singleton speicherst ? Wazu brauchst du an der Stelle einen singleton ? Singletons sind bäh.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    Dir ist aber schon klar, dass du nicht mehree Viewcontrolelr machen kannst wenn du deren Zeiger in einem singleton speicherst ? Wazu brauchst du an der Stelle einen singleton ? Singletons sind bäh.

    Gruß

    Claus
    Das BIS_Common ist eine gaaaanz andere Klasse und hat mit dem ViewController nichts zu tun!

    Was spricht gegen Singleton?
    In BIS_Common stehen ein paar Dinge, die ich an den unterschiedlichsten Stellen brauche. Da speichere ich auch z.B. die aktuellen XML-Daten.
    Wie sollte ich das sonst lösen?

    Gruß
    Udo