2013-09-02 13 views
10

La documentazione su viewControllerWithRestorationIdentifierPath:coder: dicono:Come può viewControllerWithRestorationIdentifierPath: coder: trova un'istanza esistente?

L'implementazione di questo metodo dovrebbe creare (o trovare) l'oggetto di controllo corrispondente vista e restituirlo ... Non è sempre necessario creare un nuovo oggetto View Controller nella tua implementazione di questo metodo. È anche possibile restituire una vista esistente oggetto controller che è stato creato con un altro mezzo. Ad esempio, se il controller di visualizzazione era già stato caricato da un file storyboard, , si restituirebbe quell'oggetto anziché crearne uno nuovo. [Il mio corsivo.]

Questo mi è sempre sembrato un'assurdità totale. Questo è un metodo di classe! Al momento non abbiamo accesso a nessuna istanza, 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".

EDIT: "restituire un oggetto vista controller esistente che è stato creato da un altro mezzo" Per guadagnare la grazia che mi sarà chiesto di esibire un caso reale, dal proprio app, del metodo della classe viewControllerWithRestorationIdentifierPath:coder: utilizzato per

risposta

2

L'esempio più comune di ciò a cui riesco a pensare è uno qualsiasi dei controller di visualizzazione di proprietà del 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 l'UIApplication è praticamente un Singleton e ha un delegato, significa che l'App Delegato ha stato globale, il che lo rende accessibile da qualsiasi luogo, anche in metodi di classe con: [[UIApplication sharedApplication] delegate].

Naturalmente, qualsiasi Singleton è accessibile da qualsiasi luogo e di un modello comune (ma io personalmente non piace) è quello di avere un Singleton NavigationManager che gestisce tutte le transizioni View Controller globali, quindi in questo caso si sarebbe in grado di accedere anche alle istanze esistenti.

+1

Nella realtà, dal momento che il delegato dell'app è davvero probabilmente colui che sa cosa sono già stati caricati i controller di visualizzazione dal file storyboard e come fare riferimento a loro mentre il meccanismo di ripristino entra in azione, sembra più probabile che io skip 'viewControllerWithRestorationIdentifierPath: coder:' e usa l'applicazione del delegato dell'app: viewControllerWithRestorationIdentifierPath: coder: '_instead_. E poiché questo è un metodo di istanza, non ci sono problemi. Sembra che non sia riuscito a suscitare nessuna circostanza in cui uno non lo farebbe. – matt

Problemi correlati