Korrekte Methode zum Erstellen und Wiederherstellen von UIViewControllern während der Statuswiederherstellung?

9

Ich möchte die Statuswiederherstellung in meiner App durchführen, die keine Storyboards verwendet. Ich sehe, dass meine primäre App ViewController während der Statuswiederherstellung zweimal instanziiert wurde - wie stellen Sie sicher, dass sie nur einmal erstellt wird?

So wie ich den Ablauf verstehe, würde application:willFinishLaunchingWithOptions und a pplication:didFinishLaunchingWithOptions eine commonInit -Methode verwenden, die die Anwendungen UIWindow und seinen rootViewController einrichten würde. In meinem Fall ist der rootViewController ein UINavigationController mit einer Klasse namens "MyMainViewController", die als rootViewController der UINavigation dient.

Nebenbei behandle ich auch willEncodeRestorableStateWithCoder bzw. didDecodeRestorableStateWithCoder . Aber bis ich zu meinem didDecodeRestorableStateWithCoder komme, scheint es, dass ich zwei separate Instanzen von MyMainViewController erstellt habe.

Wie kann sichergestellt werden, dass nur ein UIViewController während der Wiederherstellung erstellt wird?

Reihenfolge der Anrufe während der Wiederherstellung:

  • Erstellen Sie eine neue Instanz MyMainViewController (# 1) über die Anwendung: willFinishLaunchingWithOptions:
  • MyMainViewControllers viewControllerWithRestorationIdentifierPath: coder aufgerufen und MainViewController wird wiederhergestellt (# 2)
  • Anwendung: didDecodeRestorableStateWithCoder: wird aufgerufen und UINavigationController wird dekodiert und dem self.window
  • zugewiesen

Folgendes mache ich in meinem AppDelegate:

%Vor%     
Willam Hill 18.07.2013, 22:30
quelle

1 Antwort

0

Es gibt immer nur eine Instanz meiner Root-View-Klasse, also habe ich sie gelöst, indem ich eine Klassenmethode hinzugefügt habe, um die Klasse nur einmal zuzuweisen und zu initialisieren und den Wert andernfalls zurückzugeben:

%Vor%

Wenn die Klasse nun über [UIViewController initOnce] initialisiert wird, wird immer die gleiche View-Referenz zurückgegeben, egal ob bei der Ausführung von "willFinishLaunchingWithOptions" oder "viewControllerWithRestorationIdentifierPath".

    
jasonjwwilliams 18.02.2014 19:33
quelle

Tags und Links