ios - custom - Todos mis IBOutlet son nulos en viewDidLoad
views in ios swift (3)
Compruebe si IBoulet está vinculado correctamente con xib o no. Compruebe también el propietario de los archivos de su xib.
Si se cambia el nombre de su clase o xib, intente asignar su controlador de vista con xibName apropiado
MyViewController1 *vc = [[MyViewController1 alloc] initWithNibName:@"NibName" bundle:nil];
He creado un UIViewController
que podemos llamar MyViewController1
. Cuando llamo a MyViewController1
, todos mis IBOutlet
son nulos en viewDidLoad
(y también en el resto del código).
Cuando creo este controlador haciendo
MyViewController1 *vc = [[MyViewController1 alloc] init]
,
si sustituyo MyViewController1
por otro, por ejemplo MyViewController2
, funciona. Así que supongo que el problema está realmente en MyViewController1
.
Lo último que querrá saber es que MyViewController1
es en realidad una subclase de MySuperViewController1
que es un UIViewController
.
Gracias por tu ayuda !
EDITAR
Me di cuenta de que mi caso era tal vez más complicado. Aquí están mis archivos exactos:
// MySuperViewController1
MySuperViewController1.h
MySuperViewController1.m
MySuperViewController1.xib
// MyViewController1
MyViewController1.h
MyViewController1.m
Así que la punta pertenece a la superclase, y no a la subclase. Puedo hacer eso ?
Probablemente deberías usar:
MyViewController1 *vc = [[MyViewController1 alloc] initWithNibName:@"MyViewController1" bundle:nil]
llamar a init
no coincidirá con su archivo xib y no asignará sus diferentes IBOutlet
EDITAR:
Hay dos posibles soluciones:
Lo primero es llamar a init con super nibName:
MyViewController1 *vc = [[MyViewController1 alloc] initWithNibName:@"MySUperViewController1" bundle:nil]
El segundo es llamar al súper initWithNibName:
en el método de inicio hijo:
-(id)init {
if (self = [super initWithNibName:@"MySuperViewController1" bundle:nil]) {
// Init
}
return self;
}
Tuve el mismo problema después de que me rompí la cabeza, me di cuenta de que nombrar el xib igual que el nombre de la clase resolvió mi problema.