Frage

Ich erstelle ein ziemlich komplex iPhone App mit Core Data. Bisher haben sich die Dinge adaequat gewesen. Da die App wurde immer komplexer, jedoch hat ein neues Problem kommen: Der erste View-Controller seine viewDidLoad Methode Finishing vor dem AppDelegate sogar auf halbem Weg durch seine applicationDidFinishLaunching Methode bekommt.

View-Controller ist nicht die Wurzel, die eine Streifenstange Controller ist. Die VC in Frage ist die, für den Standard ausgewählten Registerkarte auf der Tab-Leiste. Es wird immer von IB instanziiert.

Nichts wie dies geschehen ist, bevor sie in meiner Erfahrung, und es ist Abwerfen der wichtigen Initialisierung ich im AppDelegate tun (Objekte von Core Data bekommen und sie für den Einsatz vorbereitet). Darüber hinaus ist es intermittierend - manchmal der Delegat hat Ziel zuerst.

Hat jemand eine Schwierigkeit wie dies bemerkt? Alle Beispielcode, der sich mit einem solchen Problem?

Ich nehme an, dass die Antwort ist, die Daten zu machen, laden die VC, dass die AppDelegate wird immer nur bereit, wenn die AppDelegate eine Nachricht sendet, dass es fertig ist. Ich bin ein bisschen besorgt, dass dies etwas hinzufügen, die nur mich später in den Hintern beißen wird am Ende.

War es hilfreich?

Lösung

Die Lösung, die ich zu vermeiden Rennen bin mit Bedingungen wie das ist völlig zu verzichten jede der funktionalen Benutzeroberfläche der Anwendung verweisen, bis die Daten geladen und validiert wurden. An der Spitze meiner -applicationDidFinishLaunching: Methode, habe ich die folgenden:

  1. Erstellen Sie eine UIWindow mit einem Subview:
    • ein UIImageView von Default.png mit einem Subview:
      • ein UIActivityIndicatorView zentriert im Rahmen (und Animieren)
  2. Set Fenster-Taste und sichtbar, so dass die Benutzer so schnell wie möglich ein visuelles Feedback bekommt, dass einige Daten auf brutale vor den UI Lasten gehen.
  3. Sie alle Ihre Daten Laden und Validierung (die Netzwerkaktivität enthalten könnte)
  4. Erstellen und fügen Sie die Hauptansicht der Benutzeroberfläche an das Fenster als ein Subview direkt unterhalb der Default.png Ansicht, die von seinem Superview wird dann ausgeblendet und entfernt werden.

Wie Sie Schritt 4 (Unterprogramm-Aufruf, asynchrone Benachrichtigung, Schlüssel-Wert-Beobachtung, etc ...) umzusetzen ist ganz Ihnen überlassen. Was wichtig ist, ist die Idee, das Laden von beliebigen UI-Komponenten, die von der Belastung aller erforderlichen Datenkomponenten.

Auf diese Weise können Sie den gesamten Code Ihrer Benutzeroberfläche schreiben, ohne sich um die Daten sich Gedanken, das ist, was Sie wollen auf jeden Fall in einer MVC-Anwendung zu tun.

Andere Tipps

Sobald AppDelegate Initialisierung beendet ist, Feuer einer NSNotification - das wäre die letzte, was applicationDidFinishLaunching Methode tun, vermutlich.

Habe das gleiche AppDelegate hören für diese Benachrichtigung und einen Wähler feuern, sagen loadViewController, die dann lädt die View-Controller.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top