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.