Devo affrontare una strana situazione. Nel mio controller, viewDidLoad
chiama prima dello init
. C'è qualche ragione tecnica dietro a questo?viewDidLoad chiama prima di init?
risposta
No, il messaggio viewDidLoad viene sempre chiamato dopo init.
Sei sicuro che init venga chiamato? Esistono diversi metodi di init, in particolare per UIViewController, forse viene chiamato un altro, che ti fa pensare in modo diverso.
Se hai bisogno di ulteriori informazioni, ti preghiamo di incollare il codice di viewDidLoad e tutti i tuoi metodi di init e dirci come viene caricato (cioè con il codice) o da un pennino.
Se il ViewController viene caricato dal file di pennino principale, molto probabilmente è initWithCoder che viene chiamato per inizializzare il controller.
Quando si inizializza un codice UIViewController
, si utilizza -initWithNibName:bundle:
, mentre quando viene inizializzato da un XIB, il codice di caricamento XIB chiamerà -initWithCoder:
. Uno, e solo uno di questi due metodi verrà chiamato e verrà chiamato prima dello -viewDidLoad
.
Non esiste un modo plausibile per chiamare -viewDidLoad
, a meno che non lo si chiami tu stesso (cosa che non dovresti mai fare).
So che questo post è un po 'vecchio, ma posterò il mio punto di vista ovunque perché penso che potrebbe aiutare qualcuno.
Bene, sono stato in questa stessa situazione. Ho pensato che viewDidLoad fosse chiamato prima del metodo init nella mia classe di controller di visualizzazione. Ma quello che stava realmente accadendo non era quello: il flusso inizia con il metodo init, ma salta a viewDidLoad quando chiama [super init *], quindi i miei messaggi di log nel metodo viewDidLoad venivano visualizzati per primi rispetto a quelli della mia inizializzazione personalizzata.
Penso sia così. Spero che questo per risparmiare tempo a qualcuno.
[dispiace per il mio inglese]
Grande osservazione! –
Il metodo viewDidLoad
viene chiamato quando si accede self.view
all'interno del metodo init
(dal self.view
non dovrebbe ancora essere caricate dal pennino il processo sembra essere il fissaggio in modo che non ritorna nil).
Quindi grazie. self.view in init era il mio enorme problema. –
Grazie, spostato qualsiasi attività self.view per viewDidLoad e cambiato tutte le proprietà che avevo bisogno nel mio inizializzatore designato da self.property a _property. Risolto tutto. – Jonauz
In ritardo commento, mi sono imbattuto in questo stesso problema, ma sono confuso come? Ignora semplicemente il costruttore? –
Non so che tipo di viewController ha causato questo per voi, ma ho affrontato un caso simile con UITabBarController. Ho pensato che potrebbe aiutare un altro che lo affronta con UITabBarController.
Poiché so che viewControllers chiama init prima di viewDidLoad, tranne UITabBarController e le sue sottoclassi.
Come afferma Andrew here, UITabBarControllers chiama loadView all'interno del metodo [super init]
, che causa la chiamata a viewDidLoad. Quindi il metodo viewDidLoad verrà chiamato prima che init abbia finito.
Se hai qualche cosa da configurare in viewDidLoad forse dovresti farlo all'interno del metodo init dopo la chiamata a [super init]
.
- 1. viewDidLoad viene chiamato prima il metodo init tutto viene eseguito
- 2. ViewDidLoad viene chiamato prima di initWithNibName?
- 3. iOS 9 Oggi Widget non chiama viewDidLoad
- 4. viewDidLoad chiamato prima di prepareForSegue termina
- 5. viewDidload di ViewController chiamato prima del metodo di appDelegate
- 6. UIViewController: [super init] chiama [fascio di sé initWithnibName:]
- 7. iOS viewDidLoad per UIView
- 8. Flyway Maven init prima della migrazione
- 9. UIViewController viewDidLoad errato larghezza/altezza
- 10. UIPickerView - La prima selezione di riga non chiama didSelectRow
- 11. Devo sempre chiamare [super viewDidLoad] nel metodo -viewDidLoad?
- 12. Chiama il replacer * prima * toJSON dell'oggetto?
- 13. Quando viene chiamato viewDidLoad?
- 14. viewWillAppear vs viewDidLoad ios
- 15. viewDidLoad per UIView?
- 16. Chiamate multiple a viewDidLoad/loadView
- 17. Perché self.navigationController è null in viewDidLoad?
- 18. Errore di profondità massima di ricorsione in Python quando si chiama init di super.
- 19. Perché l'operatore di assegnazione predefinito non chiama prima il distruttore?
- 20. Differenza tra viewDidLoad e viewDidAppear
- 21. Perché doesSecurityWithIdentifier non funziona all'interno di viewDidLoad?
- 22. -viewDidLoad non chiamato in sottoclasse UIViewController
- 23. presentModalViewController in viewDidLoad al primo avvio
- 24. Modificatori del metodo Perl Moose: chiama "intorno" prima di "prima" e "dopo"
- 25. mpi multiple init finalizza
- 26. Visualizzazione dell'avviso dal delegato dell'app prima della visualizzazione dell'avviso da viewDidload
- 27. iOS5: Confusione con loadview e init e variabili di istanza
- 28. init init nativo nella cartella corrente
- 29. MKMapView e viewDidLoad/viewWillAppear/viewDidAppear tramite Storyboard
- 30. Git: init init nella directory errata
Sì, init sta chiamando ma dopo viewDidLoad. Per quel particolare UIViewController basta allocare e init. e impostando quel controller su un UITabBarController come controller di visualizzazione e presentando il tabbarController? C'è qualcosa di sbagliato qui? –
Init viene eseguito prima di viewDidLoad, a meno che non si sia incasinato davvero male, il che è molto improbabile. Ti manca un altro init o trarre conclusioni sbagliate. Cosa ti fa pensare che init sia chiamato dopo viewDidLoad? E hai controllato che questo è lo stesso oggetto? Di nuovo, nessun codice - nessun modo per controllare. – Eiko