ios - La vista de salida de ViewController primero no es nula, luego nula cuando se carga desde el paquete
uiviewcontroller bundle (2)
Estoy cargando un UIViewController
desde un paquete con initWithNibName:bundle:
Si configuro un punto de interrupción en su viewDidLoad
, puedo ver que su view
está configurada. También puedo ver esto al ver About.xib
en el Interface Builder.
Sin embargo, una vez que la vista se usa realmente por primera vez (en una llamada a [self.navigationController pushViewController:viewController animated:YES]
según la lógica de mi aplicación) [self.navigationController pushViewController:viewController animated:YES]
este error:
* Finalización de la aplicación debido a una excepción no detectada ''NSInternalInconsistencyException'', razón: ''- [UIViewController _loadViewFromNibNamed: bundle:] cargó el plumín "Acerca de" pero no se configuró la vista de salida''.
Esta es la llamada que también activa viewDidLoad
. Entonces, aparentemente, durante la llamada, la view
es primero no-nil (como debería ser) y luego aparentemente se vuelve nula nuevamente.
Si alternativamente po [viewController view]
en el depurador inmediatamente antes de la llamada, obtengo este error (que presumiblemente es solo otra presentación del mismo síntoma):
error: la ejecución fue interrumpida, razón: punto de corte de la excepción ObjC interna (-3). El proceso ha sido devuelto al estado antes de la evaluación de la expresión.
¿Cómo puedo cargar y usar el controlador de vista junto con una barra de navegación existente sin tener que correr estos errores?
ACTUALIZACIÓN El problema aparentemente desaparece si cargo el controlador de vista desde mi guión gráfico (no necesariamente mi guión gráfico principal) en lugar de desde un archivo XIB.
Al visualizar el archivo xib en Xcode, en el inspector de identidad, ¿está configurada la subclase personalizada para ver la clase del controlador? Si configura eso, vaya al inspector de conexiones, verá un atributo llamado "vista", simplemente arrástrelo a su vista en el constructor Interfaz y debería funcionar
Supongo que estaba anulando algún comportamiento predeterminado de UIViewController
, ya sea convertir su view
una propiedad weak
, un método loadView
extraño o simplemente no llamar a super
en uno de sus métodos reemplazados.
Otro error común es llamar a un super viewDidLoad
no coincidente (llamar a super viewDidLoad
desde un awakeFromNib
, etc.) que podría ocurrir cuando mueve el código o después de probar cosas diferentes.