neue View beim Restart der App

  • neue View beim Restart der App

    Hallo alle zusammen,

    ich habe ein Problem, ich will eine App schreiben bei der man sich einlochen muss. Das funktioniert beim starten soweit auch wunderbar. Nun will ich wenn die App in den Hintergrund geht und wieder in Vordergrund kommt, das man sich wieder anmelden muss.

    PHP-Quellcode

    1. - (void)applicationWillEnterForeground:(UIApplication *)application
    2. {
    3. // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
    4. UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
    5. bundle: nil];
    6. UIViewController *currentController = [self.window rootViewController];
    7. LogViewController *logViewController = [mainStoryboard instantiateViewControllerWithIdentifier:@"logView"];
    8. [currentController presentModalViewController:logViewController animated:NO];
    9. }



    Die Methode ruft er auch beim starten auf, wenn ich mit dem Debugger durch gehe. Aber leider öffnet er die View nicht. Weiß einer von euch was ich falsch mache??

    Schon mal Danke.

    Gruß
    Cabaalo
  • Du legst den Login-Controller auf den Rootview-Controller. Wenn der aber nicht zuoberst ist, zeigt die App auch nichts an.

    BTW: Warum erzeugst Du ein neues Storyboard? self.viewController.storyboard tut es genauso. Wenn Du Deine App in den Hintergrund schickst, während sie den Login-Controller anzeigt, legt sie da einen neuen drauf. Das kann der Nutzer beliebig oft machen und die App so abstürzen lassen. Außerdem sieht er wieder das Login, wenn er seinen Namen und Passwort richtig eingibt.
    „Meine Komplikation hatte eine Komplikation.“
  • Die saubere Lösung ist, sich vom rootViewController nach oben durchzuhangeln. Das geht relativ einfach, wenn Du jeder Viewcontrollerklasse über eine Kategorie eine entsprechende Methode spendierst, die Du abhängig von der Klasse implementierst (z. B. Navigationcontrooler liefert den obersten Viewcontrolller, Tabbar den ausgewählten usw.).

    Die pragmatische Lösung ist eine Property topViewController im App-Delegate, die jeder Viewcontroller in viewDidAppear: setzt.
    „Meine Komplikation hatte eine Komplikation.“