2013-09-02 14 views
10

Docs na viewControllerWithRestorationIdentifierPath:coder: powiedzieć:W jaki sposób viewControllerWithRestorationIdentifierPath: coder: znaleźć istniejącą instancję?

Implementacja tej metody powinny stworzyć (lub znaleźć) z odpowiedni widok kontrolera obiekt i zwraca go ... To nie zawsze jest niezbędne do utworzenia nowego obiektu widok kontrolera w waszej implementacji tej metody. Można również zwrócić istniejący obiekt kontrolny, który został utworzony w inny sposób. Na przykład: , jeżeli kontroler widoku został już załadowany z pliku scenorysu, , zwrócisz ten obiekt zamiast utworzyć nowy. [Moja kursywą.]

To zawsze wydawało mi się kompletnym nonsensem. To jest metoda klasy! W tej chwili nie mamy żadnego dostępu do żadnych wystąpień - chyba że je utworzymy. Byłbym wdzięczny, gdyby ktoś mógł mi wyjaśnić, w jaki sposób metoda klasy może znaleźć lub wiedzieć o "kontrolerze widoku, który został już załadowany z pliku scenorysu".

EDIT:. „Powróci istniejący obiekt widoku kontrolera, który został utworzony przez inny środek” Aby zdobyć nagrodę należy mi pokazać rzeczywisty przypadek, ze swojej aplikacji, metody klasy viewControllerWithRestorationIdentifierPath:coder: używanego do

Odpowiedz

2

Najbardziej typowym przykładem tego, co mogę wymyślić, jest dowolny kontroler widoku, który jest własnością Delegata aplikacji. Tradycyjnie jest to kontroler na pasku kart lub kontroler nawigacyjny w tradycyjnych aplikacjach, ale czasami może to być coś zupełnie niestandardowego, czyli wtedy, gdy ta funkcja może być przydatna.

Od UIApplication jest dość dużo Singleton i ma jednego delegata, to znaczy, że App Delegat ma stan globalnej, co czyni ją dostępną z dowolnego miejsca, w tym metod klasy z: [[UIApplication sharedApplication] delegate].

Oczywiście, każda pojedyncza jest dostępny z dowolnego miejsca i wspólny wzór (ale ja osobiście lubię) ma mieć NavigationManager singleton, który zarządza żadnych globalnych przemian widok kontrolera, a więc w tym wypadku byłbyś w stanie dostęp do istniejących instancji.

+1

W prawdziwym życiu, ponieważ delegat aplikacji jest rzeczywiście prawdopodobnie tym, który wie, jakie kontrolery widoku zostały już załadowane z pliku scenorysu i jak się do nich odwołać, gdy mechanizm przywracania się uruchamia, wydaje się bardziej prawdopodobne, że pomiń 'viewControllerWithRestorationIdentifierPath: coder:' i użyj aplikacji 'delegata: viewControllerWithRestorationIdentifierPath: coder:' _instead_. A ponieważ jest to metoda instancji, nie ma problemu. Wydaje mi się, że nie udało mi się wywołać żadnych okoliczności, w których nie byłoby to możliwe. – matt

Powiązane problemy