awakeFromNib, puntos de venta y guiones gráficos: ¿está mal la documentación?

De acuerdo con laReferencia de adiciones de NSObject UIKit, las variables de salida deben ser establecidas por el tiempoawakeFromNib Se llama (énfasis todo mío):

La infraestructura de carga de plumillas envía un mensaje awakeFromNib a cada objeto recreado desde un archivo de plumillas, pero solo después de que todos los objetos en el archivo comprimido se hayan cargado e inicializado.Cuando un objeto recibe un mensaje awakeFromNib, se garantiza que ya tiene todas sus conexiones de salida y acción ya establecidas.

...

Importante: debido a que no se garantiza el orden en el que se crea una instancia de los objetos desde un archivo, sus métodos de inicialización no deben enviar mensajes a otros objetos en la jerarquía.Los mensajes a otros objetos se pueden enviar de forma segura desde un método awakeFromNib.

Por lo general, implementa awakeFromNib para objetos que requieren una configuración adicional que no se puede realizar en el momento del diseño. Por ejemplo, puede usar este método para personalizar la configuración predeterminada de cualquier control para que coincida con las preferencias del usuario o los valores de otros controles. También puede usarlo para restaurar controles individuales a algún estado anterior de su aplicación.

Sin embargo, esto no coincide con mis pruebas, al menos utilizando Storyboards. Los resultados de la siguiente prueba parecen contradecir la documentación:

Crear una nueva aplicación de vista única en Xcode.Arrastra un segundo ViewController al guión gráfico.Dé al primer ViewController un botón y cree un segmento modal a partir de ese botón que muestra el segundo ViewController.Cree un archivo de clase ViewController para el segundo ViewController.Cree una etiqueta en el segundo ViewController en el guión gráfico y cree una salida llamadasomeLabel De aquí a la clase correspondiente de ViewController.Agrega lo siguienteawakeFromNib Implementación al segundo ViewController:

.

- (void) awakeFromNib {
    [super awakeFromNib];
    if (self.someLabel == nil) {
        NSLog(@"someLabel property is nil");
    }
    else {
        NSLog(@"someLabel property is not nil");
    }

    if (_someLabel == nil) {
        NSLog(@"_someLabel is nil");
    }
    else {
        NSLog(@"_someLabel is not nil");
    }
}
Ejecute la aplicación en el simulador y haga clic en el botón.

Cuando hago esto, observo lo siguiente registrado:

2013-07-01 09:24:35.755 test[498:c07] someLabel property is nil
2013-07-01 09:24:35.758 test[498:c07] _someLabel is nil

Como consecuencia de este comportamiento, cuando necesito que mis ViewControllers tengan alguna lógica de inicialización que involucre a sus puntos de venta, necesito usar un truco como el propuesto en la respuesta.aquí Para poder utilizar los puntos de venta. Si entiendo la documentación correctamente, el hecho de que me obliguen a usar este truco es un error en el comportamiento de UIKit, ydebería Para poder poner esa inicialización enawakeFromNib y simplemente utilizar los puntos de venta sin ningún tipo de hacks.

Sin embargo, no puedo encontrar ninguna otra mención de este problema en Internet, lo que parece extraño dado lo fundamental que parece ser esta funcionalidad (para mí). Además, nunca he usado archivos de plumilla reales, solo guiones gráficos, por lo que me falta algo de perspectiva sobre esto, y la documentación sobre este tema es bastante detallada y lo suficientemente difícil como para ser un novato en iOS, no estoy seguro de haberlo entendido. correctamente. ¿Se trata de un error de UIKit genuino o he malentendido la documentación de alguna manera? ¿Quizás este método no está destinado a usarse en conjunto con los guiones gráficos?

Respuestas a la pregunta(2)

Su respuesta a la pregunta