what sierra new mac high features developer compilador apple macos cocoa interface-builder nib

macos - sierra - xcode ios 12



¿Cuál es el propietario del archivo(en el constructor de interfaz)? (4)

Soy nuevo en Cocoa y no entiendo el concepto de File''s Owner de archivo de un archivo .nib.

Así es como yo vería las cosas:

  • Considere un archivo myNibFile.nib archivo que describe cómo se ve una ventana.

  • Ahora, quiero conectar una ventana real a este archivo .nib. Entonces, creo una clase myWindow , que es una subclase de NSWindowController . Y, para hacer esta conexión, cambio el método init esta manera:

    -(id)init { [super initWithWindowNibName:@"myNibFile"]; return self; }

Entonces, entiendo que cuando creo una instancia de myWindow , el "sistema" irá y mirará el archivo .nib y creará el objeto adecuado.

Por lo tanto, mi pregunta es:

  • ¿por qué tengo que especificar que el File''s Owner del archivo de mi archivo myWindow es myWindow ? ¿No es redundante?

  • Supongo que significa que realmente no entendí lo que era el File''s Owner . Qué es ? ¿Por qué el archivo .nib tiene que pertenecer a algo? ¿No puede estar "en algún lugar" en mi "aplicación" y cuando es necesario, el "sistema" va allí y lo usa?

¡Gracias por ayudarme a ver más claramente en estos nuevos conceptos!


Dos puntos a recordar:

  • El propietario del archivo es el objeto que carga el plumín, es decir, el objeto que recibe el mensaje loadNibNamed: o initWithNibName:
  • Si desea acceder a cualquier objeto en la punta después de cargarlo, puede establecer una salida en el propietario del archivo.

Así que creaste una vista elegante con muchos botones, subvistas, etc. Si desea modificar cualquiera de estas vistas / objetos en cualquier momento después de cargar la punta DESDE el objeto de carga (generalmente una vista o un controlador de ventana), establezca salidas para estos objetos al propietario del archivo. Es así de simple.

Esta es la razón por la que, de forma predeterminada, todos los controladores de vista o los controladores de ventana actúan como propietarios del archivo y también tienen una salida a la ventana principal o al objeto de vista en el archivo de plumilla: porque duh, si controla algo definitivamente necesitará tener una salida para que pueda enviarle mensajes.

La razón por la que se llama propietario del archivo y se le otorga un lugar especial, es porque a diferencia de los otros objetos en el plumín, el propietario del archivo es externo al plumín y no es parte de él. De hecho, solo está disponible cuando se carga la punta. Por lo tanto, el propietario del archivo es un suplente o proxy para el objeto real que luego cargará la punta.

Espero que hayas entendido. Aclararé alguno de los puntos si lo pides.


El propietario del archivo en Interface Builder es para que sepa el tipo de objeto del padre. Esto se usa de dos maneras. En primer lugar, en Interface Builder para que IB sepa qué salidas y acciones están disponibles para conectarse. En segundo lugar, el marco de la aplicación lo utiliza para saber cómo reconectar las cosas con el resto de su código una vez que se haya cargado el archivo nib.


El propietario del archivo es un marcador de posición en IB, por lo que todas las salidas y acciones en su código son "vinculables" en IB, puede controlar y arrastrar para conectar elementos de la pantalla al código.


Lo fundamental es comprender que Interface Builder le permite crear objetos que se conectan automáticamente entre sí, sin ningún esfuerzo por parte de su programa. Puede crear una instancia de todo tipo de objetos, incluidos los que no están a la vista, y pueden estar interrelacionados; por ejemplo, puede crear la instancia de un origen de datos de vista de tabla junto con la vista en sí, etc. Este mecanismo se usa comúnmente para crear un delegado de aplicación dentro de su NIB de menú principal.

Sin embargo, dado que todo se realiza mediante arrastrar y soltar, parece que no hay forma de que pueda establecer una conexión entre cualquiera de los objetos NIB y los objetos que ya existen en su aplicación, con una excepción.

Cuando el código está cargando el archivo NIB, tiene la opción de especificar exactamente un objeto que el NIB considerará como el "Propietario de los archivos". Este es el marcador de posición que ves dentro de Interface Builder; Ya que puede representar cualquier objeto dentro de su aplicación, Interface Builder no puede saber qué acciones / salidas están disponibles en ella. Es por esto que puede modificar la "clase" del propietario de los archivos, en la pestaña Atributos.

El propietario de los archivos no representa realmente "propiedad" o "paternidad". Lo que representa es "el objeto que cargó este NIB".