2013-09-02 3 views
10

Die docs auf viewControllerWithRestorationIdentifierPath:coder: sagen:Wie kann ViewControllerWithRestorationIdentifierPath: Coder: eine vorhandene Instanz finden?

Ihre Implementierung dieser Methode sollte (oder zu finden), um das entsprechenden View-Controller-Objekt zu erstellen und senden Sie es ... Es ist nicht immer notwendig ist, ein neues View-Controller-Objekt zu erstellen in Ihrer Implementierung dieser Methode. Sie können auch eine vorhandene Sicht Controller-Objekt, das auf andere Weise erstellt wurde, zurückgeben. Beispiel: Wenn der Ansichts-Controller bereits aus einer Storyboard-Datei, geladen wurde, würden Sie dieses Objekt zurückgeben, anstatt ein neues zu erstellen. [Meine Kursivschrift.]

Das erschien mir immer als kompletter Unsinn. Dies ist eine Klassenmethode! In diesem Moment haben wir keinen Zugriff auf Instanzen - es sei denn, wir erstellen einen. Ich wäre dankbar, wenn mir jemand erklären könnte, wie in aller Welt eine Klassenmethode "den View-Controller, der bereits aus einer Storyboard-Datei geladen wurde, finden oder kennen kann".

EDIT: „Um ein View-Controller-Objekt zurück, das durch ein anderes Mittel geschaffen wurde“ die Prämie verdienen Sie ihnen einen tatsächlichen Fall zeigen müssen, von Ihrer eigenen App, der Klassenmethode viewControllerWithRestorationIdentifierPath:coder: verwendet wird, um

Antwort

2

Das gängigste Beispiel hierfür ist einer der View-Controller, die dem App-Delegaten gehören. Dies ist in herkömmlichen Apps traditionell ein Tab-Controller oder ein Navigations-Controller, aber manchmal kann es auch etwas völlig Eigenes sein, wenn diese Funktionalität nützlich sein könnte.

Da es sich bei UIApplication um einen Singleton handelt und ein Delegat vorhanden ist, bedeutet dies, dass Ihr App-Delegat über einen globalen Status verfügt, der ihn von überall aus zugänglich macht, einschließlich Klassenmethoden mit: [[UIApplication sharedApplication] delegate].

Natürlich ist jede Singleton von überall zugänglich ist und ein gemeinsames Muster (aber, den ich persönlich nicht mögen) ist ein NavigationManager Singleton haben, die alle globalen View-Controller-Übergänge schafft, so dass in diesem Fall, dass Sie wäre in der Lage zu Greifen Sie auch auf die vorhandenen Instanzen zu.

+1

Im echten Leben, da der App-Delegat in der Tat wahrscheinlich derjenige ist, der weiß, welche View-Controller bereits aus der Storyboard-Datei geladen wurden und wie man sich darauf bezieht, wie der Wiederherstellungsmechanismus einsetzt, scheint es wahrscheinlicher, dass ich Überspringen Sie 'viewControllerWithRestorationIdentifierPath: coder:' und verwenden Sie die Anwendung 'applicate: viewControllerWithRestorationIdentifierPath: coder:' _instead_ des Anwendungsdelegaten. Und da dies eine Instanzmethode ist, gibt es kein Problem. Ich scheine es versäumt zu haben, irgendwelche Umstände hervorzurufen, wo man das nicht tun würde. – matt