¿Por qué mi fuego awakeFromNib no se disparará?

Estoy empezando a mover más de mi vista jerarquía de construcción a IB.

Tengo un archivo de punta llamado “AlignmentViewController.xib” en el que configuro mi jerarquía de vistas con AlignmentViewController como propietario de los archivos. Esto funciona bien

Uno de los métodos en los que permanezco borroso es awakeFromNib. En el siguiente fragmento de código de AlignmentViewController agrego el único método adicional awakeFromNib. Sin embargo, NO se llama:

- (void)awakeFromNib { NSLog(@"AlignmentViewController - awakeFromNib"); [super awakeFromNib]; } - (id)initWithChromosomeName:(NSString *)chromosomeName basepairStart:(NSUInteger)basepairStart basepairEnd:(NSUInteger)basepairEnd { self = [self initWithNibName:@"AlignmentViewController" bundle:nil]; if (nil != self) { self.title = @"Alignment"; self.chromosomeName = chromosomeName; self.basepairStart = basepairStart; self.basepairEnd = basepairEnd; self.wantsFullScreenLayout = YES; } return self; } 

¿Alguien puede aclararme lo que me he perdido aquí?

Saludos, Doug

ACTUALIZACIÓN: Después de leer algunas de las respuestas me doy cuenta de que necesito llegar al fondo de algo que es bastante fundamental.

Mirando la inicialización:

 - (id)initWithChromosomeName:(NSString *)chromosomeName basepairStart:(NSUInteger)basepairStart basepairEnd:(NSUInteger)basepairEnd { self = [self initWithNibName:@"AlignmentViewController" bundle:nil]; 

Me doy cuenta de que estoy llamando initWithNibName: paquete: indirectamente. ¿Es esta mala práctica? El archivo AlignmentViewController.xib define mi jerarquía de vistas. Pero realmente no estoy usando initWithNibName: bundle: de la manera típica? ¿Hay una mejor manera de hacer esto?

-awakeFromNib se envía a todos los objetos que se -awakeFromNib instancias desde el plumín después de que todos los objetos de plumilla han creado una instancia. El dueño no es uno de esos objetos. Existe antes de deserializar el plumín y está conectado al plumín después de la carga, por lo que no se envía -awakeFromNib (a menos, por supuesto, que sea instanciado por algún otro plumín).

Una pista aquí es que no hay forma de que ambos -initFromChromosomePair:basepairStart:basepairEnd: y -awakeFromNib puedan ser llamados. El cargador de nib siempre llama -initWithCoder: -initWithFrame: o -init (las reglas para las cuales se envían están en The Nib Object Life Cycle ). El hecho de que tenga otro inicializador designado sugiere fuertemente que está creando manualmente este objeto en algún lugar del código, lo que significa que este objeto no es “despertado desde el plumín”.

Simplemente agregando una aclaración: -awakeFromNib se envía al propietario del archivo en Cocoa, pero no a Cocoa Touch.

De los documentos de Apple:

  • Envía un mensaje awakeFromNib a los objetos apropiados en el archivo de punta que definen el selector de coincidencia:
    • En Mac OS X, este mensaje se envía a cualquier objeto de interfaz que define el método. También se envía al propietario del archivo y a cualquier objeto proxy que lo defina también.
    • En iPhone OS, este mensaje se envía solo a los objetos de interfaz que fueron instanciados por el código de carga de nib. No se envía al propietario del archivo, al Primer Respondedor ni a ningún otro objeto proxy.

Según lo que nos ha dicho, creo que sé cuál es su problema. Se llama a awakeFromNib cuando un objeto se deserializa desde un archivo de punta. Aquí tiene un objeto, que es el propietario, que existe antes de que se cargue el plumín. Por awakeFromNib tanto, awakeFromNib nunca se enviaría a su AlignmentViewController.h .

Si necesita hacer algo aquí, intente usar loadView en loadView lugar. O simplemente hazlo después de cargar el plumín. ¿Qué es lo que estás tratando de hacer para awakeFromNib quieres hacerlo en awakeFromNib ?