Domanda Come può viewControllerWithRestorationIdentifierPath: coder: trovare un'istanza esistente?


I documenti su viewControllerWithRestorationIdentifierPath:coder: dire:

L'implementazione di questo metodo dovrebbe creare (o trovare) il   corrispondente oggetto controller vista e restituirlo ... Non è sempre   necessario creare un nuovo oggetto controller di visualizzazione nel tuo   implementazione di questo metodo. Puoi anche restituire una vista esistente   oggetto controller che è stato creato con un altro mezzo. Per esempio, Se   il controller della vista era già stato caricato da un file storyboard,   restituiresti quell'oggetto piuttosto che crearne uno nuovo. [Il mio corsivo.]

Mi è sempre sembrata un'assurdità totale. Questo è un metodo di classe! Non abbiamo accesso a nessuna istanza in questo momento, a meno che non ne creiamo una. Sarei grato se qualcuno potesse spiegarmi come mai un metodo di classe può trovare o sapere "il controller di visualizzazione che è già stato caricato da un file storyboard".

MODIFICARE: Per guadagnare la taglia devi mostrarmi un caso reale, dalla tua app, del metodo di classe viewControllerWithRestorationIdentifierPath:coder: essere utilizzato per "restituire un oggetto controller di visualizzazione esistente che è stato creato con un altro mezzo".


11
2017-09-02 23:38


origine


risposte:


L'esempio più comune di ciò a cui riesco a pensare è uno qualsiasi dei controller di visualizzazione posseduti dal delegato dell'app. Questo è tradizionalmente un controller della barra delle linguette o un controller di navigazione nelle app tradizionali, ma a volte può essere qualcosa di completamente personalizzato, ovvero quando questa funzionalità può essere utile.

Dal momento che il UIApplication è praticamente un singleton e ha un delegato, significa che il tuo delegato dell'app ha uno stato globale, che lo rende accessibile da qualsiasi luogo, compresi i metodi di classe con: [[UIApplication sharedApplication] delegate].

Ovviamente, ogni singleton è accessibile da qualsiasi luogo e da un pattern comune (ma io personalmente non mi piace) è quello di avere un NavigationManager singleton che gestisce tutte le transizioni del controller di visualizzazione globale, quindi in questo caso potreste accedere anche alle istanze esistenti.


2
2017-09-02 23:55