2009-05-13 6 views
9

Tengo un archivo NIB que cargo usando NSWindowController initWindowNibName. El archivo NIB contiene una NSWindow. Es el propietario del archivo de la clase NSWindowController. He conectado la salida de ventana del propietario del archivo a la ventana.Cargando el archivo NIB utilizando NSWindowController no establece la ventana o los objetos de nivel superior

Cuando cargo el NIB, [windowController window] es nulo y también lo es la matriz de objetos de nivel superior. Sin embargo, todavía puedo llamar a [windowController showWindow: nil] y mostrar la ventana con éxito.

Algo simplemente no parece correcto aquí. He confirmado que las conexiones y el propietario del archivo están bien. De hecho, cuando miro el valor de propietario de la instancia de windowController en el depurador, lo veo apuntando a sí mismo como espero.

¿Alguna sugerencia sobre qué podría estar pasando?

Gracias!

Respuesta

6

Cuando dice que [windowController window] es nulo, ¿cómo está determinando esto? El NIB no se carga hasta que se llama al -window por primera vez. Entonces, si está buscando en el depurador, verá _window como nulo hasta que llame al showWindow:. Después de eso, _window debería tener un valor no nulo.

+0

Sí, tienes razón. Estaba afirmando que la ventana no era nula antes de llamar a [ventana del controlador]. Todavía no estoy acostumbrado a mucha de la 'magia' que Cocoa hace por ti bajo las sábanas ... es más inteligente que yo, o me hace parecer más tonto de lo que creo. – psychotik

+1

Cuanto más tiempo desarrollo en Cocoa, más aprendo la poca magia que realmente es (a excepción de KVO, el método swizzling es mágico incluso cuando lo entiendes). El truco es no confiar en ningún detalle de implementación interna. No asumas que sabes lo que significa _window. Tiene un guión bajo; No es tu problema. Las interfaces públicas son extremadamente consistentes en sus comportamientos. No intentes escabullirte a su alrededor. ¡Buena suerte! –

5

¿Ha subclasificado NSWindowController?

Cuando hago esto, yo uso un NSWindowController llama MyWindowController y llamo initWithWindowNibName: en la init

Y luego, ajuste del propietario del archivo para que apunte a la clase MyWindowController la subclase.

+3

No es necesario que subclass NSWindowController. Está permitido, pero no es obligatorio, y no debería resolver el problema de psychotik. –

+1

Tanto PH como Abizern obtuvieron crédito para resolver mi problema. – user523234

+0

@ user523234, sí, gracias a ellos y al asker en mi caso por resolver mi problema !!! – Mazyod

Cuestiones relacionadas