objective-c cocoa-touch cocoa cocoa-design-patterns nswindowcontroller

objective c - Diferencia entre NSWindowController Vs NSViewController



objective-c cocoa-touch (2)

Con iPhone SDK y Leopard SDK, introdujeron controladores de vista, o NSViewController y UIViewController. Como sus nombres sugieren, lo que hacen es gestionar vistas.

Los controladores de vista son para administrar vistas. La tendencia actual en el diseño de la interfaz de usuario es Ventana única, Vista múltiple. Lo que significa es que hay una ventana y dentro de ella, diferentes grupos de vistas diseñados para diferentes propósitos se pueden intercambiar dentro y fuera. Por lo tanto, los controladores de vista los manejan para los programadores para un patrón bien establecido. Actualmente, los controladores de vista son muy importantes para la programación de iPhone e iPod touch, ya que la plataforma se basa en el modelo de ventana única y de vista múltiple. Sin embargo, no me parece que el uso del controlador de vista sea muy popular para Mac. ¿qué tal el controlador de ventana como NSWindowController? Su contraparte, UIWindowController no existe para el entorno de iPhone e iPod touch, porque solo hay una ventana para ese entorno. A diferencia de los controladores de vista, el NSWindowController es para programas basados ​​en documentos. Bueno, el programa basado en documentos puede utilizar múltiples ventanas. Por lo tanto, es razonable pensar que NSWindowController es para programas basados ​​en documentos como dice el documento de Apple.

Vengo de fondo de iOS y estoy empezando a aprender Cocoa. En iOS, a menos que tengamos múltiples objetivos para iPad y iPhone , generalmente tenemos una ventana y administramos la pantalla con UIViewControllers . Donde cada nueva pantalla se asignará la mayor parte del tiempo a un UIViewController .

Sin embargo, en el caso del cacao, esto parece ser lo contrario, donde NSWindow administra una nueva pantalla / ventana y sus subcomponentes son administrados por NSViewController . Por lo tanto, si tengo varias aplicaciones para ventanas, debería tener un NSWindowController separado para cada ventana.

¿Es este enfoque correcto o estoy teniendo un malentendido?


También vengo de iOS y empecé a codificar aplicaciones de Mac hace un tiempo, aprendiendo principalmente de la documentación de Apple.

Mi impresión es que en el escritorio, casi nunca necesita los NSViewController s (una gran excepción sería una ventana con pestañas y múltiples vistas, como la pantalla de bienvenida de GarageBand).

La mayoría de las veces tienes un NSWindowController por ventana. Conozca primero la relación entre NSWindow y NSWindowController (y NSDocument , si está creando una aplicación basada en documentos).

Una vez que hayas acertado, comienza a experimentar con NSViewController .

ACTUALIZACIÓN: Parece que desde la introducción de los guiones gráficos para las aplicaciones mac, Apple espera que la mayor parte de la lógica de presentación de la vista se migre del NSWindowController anterior al NSWindowController más NSViewController , más en línea con la estructura de una aplicación iOS. No tengo mucho conocimiento sobre dónde dibujar la línea, o qué tipo de código debe permanecer en el controlador de la ventana (o si aún debe ser subclasificado).