Me encuentro en una situación extraña. En mi controlador, viewDidLoad
está llamando antes de init
. ¿Hay alguna razón técnica detrás de eso?viewDidLoad llamando antes de init?
Respuesta
No, el mensaje viewDidLoad siempre se llama después de init.
¿Estás seguro de que se llama init en absoluto? Hay varios métodos de inicio especialmente para UIViewController, tal vez se llame a otro en lugar de hacerlo pensar de manera diferente.
Si necesita más información, pegue el código de viewDidLoad y todos sus métodos de inicio, y díganos cómo se carga (es decir, con código) o desde un plumín.
Si su ViewController se está cargando desde su archivo de punta principal, lo más probable es que se llame a initWithCoder para inicializar el controlador.
Al inicializar un UIViewController
de código, se utiliza -initWithNibName:bundle:
, mientras que cuando se inicializa desde un XI ter, el código de carga XI ter llamará -initWithCoder:
. Uno, y solo se llamará a uno de estos dos métodos, y definitivamente se llamarán antes del -viewDidLoad
.
No hay forma concebible de que se llame primero a -viewDidLoad
, a menos que lo llame usted mismo (lo que nunca debería hacer).
Sé que esta es una publicación un poco antigua, pero publicaré mi punto de vista en cualquier lugar porque creo que podría ayudar a alguien.
Bueno, he estado en esta misma situación. Pensé que se llamaba a viewDidLoad antes del método init en mi clase de controlador de vista. Pero lo que realmente estaba sucediendo no era eso: el flujo comienza en el método init, pero salta a viewDidLoad cuando se llama a [super init *], por lo que mis mensajes de registro en el método viewDidLoad se mostraban primero que aquellos en mi inicialización personalizada.
Creo que eso es todo. Espero que esto le ahorre tiempo a alguien.
[Lo siento por mi Inglés]
¡Gran observación! –
El método viewDidLoad
se está llamando al acceder self.view
dentro del método init
(ya self.view
no debe sin embargo ser cargado desde la punta del proceso parece ser sujetar por lo que no vuelve nulo).
Así que gracias. self.view in init fue mi gran problema. –
Gracias, moví todas las actividades de selfview a viewDidLoad, y cambié todas las propiedades que necesitaba en mi inicializador designado de self.property a _property. Resolvió todo. – Jonauz
Último comentario, me encontré con este mismo problema, pero estoy confundido ¿cómo? ¿Simplemente pasa el constructor? –
No sé qué tipo de viewController causó esto para usted, pero me enfrenté a un caso similar con UITabBarController. Pensé que podría ayudar a otro que se enfrenta con UITabBarController.
Como sé, todos los controles de vista llaman a init antes de viewDidLoad, a excepción del UITabBarController y sus subclases.
Como Andrew afirma here, UITabBarControllers llama a loadView dentro del método [super init]
, que causa la llamada a viewDidLoad. Entonces se llamará al método viewDidLoad antes de que init haya terminado.
Si tiene algo para configurar en viewDidLoad, quizás deba hacerlo dentro del método init después de la llamada al [super init]
.
- 1. ¿Se está llamando a ViewDidLoad antes de initWithNibName?
- 2. ¿Se puede llamar a viewDidLoad antes de que 'init' de un viewController se ejecute por completo?
- 3. iPhone: ¿Qué se llama después de viewDidLoad antes de viewWillAppear?
- 4. llamando a Object.notify() antes de Object.wait()
- 5. ViewController init?
- 6. iOS viewDidLoad para UIView
- 7. viewDidLoad y awakeFromNib timing
- 8. `[super viewDidLoad]` convención
- 9. viewDidLoad(), LoadView()
- 10. Llamando a OnActionExecuting de FilterAttribute antes de OnController's OnActionExecuting
- 11. Llamando al constructor de clase hijo antes del constructor padre
- 12. Métodos de instancia llamando a métodos de clase llamando a los métodos de instancia
- 13. ¿Por qué usamos [super viewDidLoad] en cada método viewDidLoad?
- 14. Llamadas múltiples a viewDidLoad/loadView
- 15. viewDidLoad en NSViewController?
- 16. viewWillAppear vs viewDidLoad ios
- 17. Xcode 4 - viewDidLoad problema
- 18. referencia indefinida a `std :: ios_base :: Init :: Init() '
- 19. ¿Cuándo se llama a viewDidLoad?
- 20. UIViewController -viewDidLoad no se llama
- 21. Diferencia entre viewDidLoad y viewDidAppear
- 22. iOS5: Confusión con loadview e init y variables de instancia
- 23. -viewDidLoad no llamado en UIViewController subclasificado
- 24. ViewDidLoad de Android y su equivalente viewDidAppear
- 25. ¿Por qué no funcionaSegueWithIdentifier dentro de viewDidLoad?
- 26. ¿Por qué ocurrió este error? java.lang.RuntimeException: ImageLoader debe ser init con la configuración antes de usar
- 27. popviewcontroller no está llamando viewWillAppear
- 28. Obtención de longitud/latitud del usuario Cuando viewDidLoad
- 29. ¿Siempre tengo que llamar a [super viewDidLoad] en el método -viewDidLoad?
- 30. UIViewController subclase no init llama cuando se carga de punta
Sí, init está llamando pero después de viewDidLoad. Para ese UIViewController en particular, solo alloc e init. y configurar ese controlador en un UITabBarController como un controlador de vista y presentar el tabbarController? ¿Hay algo mal aquí? –
Init se ejecuta antes de viewDidLoad, a menos que lo arruines realmente muy mal, lo que es muy poco probable. Te estás perdiendo otro init o sacas conclusiones equivocadas. ¿Qué te hace pensar que se invoca init después de viewDidLoad? ¿Y has comprobado que este es el mismo objeto? De nuevo, sin código, no hay forma de verificarlo. – Eiko