20

Vengo de iOS fondo y empiezo a aprender Cacao. En iOS a menos que tengamos objetivos múltiples para iPad y iPhone usualmente tenemos una ventana y administramos la pantalla usando UIViewControllers. Donde cada pantalla nueva se asignará la mayoría del tiempo a un UIViewController.Diferencia entre NSWindowController V NSViewController

Sin embargo, en Cocoa esto parece ser lo contrario cuando se administra una nueva pantalla/ventana por NSWindow y sus subcomponentes están gestionados por NSViewController. Entonces, si tengo varias aplicaciones de ventana, debería tener NSWindowController por separado para cada ventana.

¿Este enfoque es correcto o estoy teniendo un malentendido?

+0

Lo que no has dicho aquí (y debes aclarar) es que vienes de iOS y ahora empiezas a trabajar con la programación en MacOS, ¿correcto? –

+1

Lo tienes un poco al revés en la parte de iOS. El 'UIViewController' no administra la' UIWindow' - la 'UIWindow' administra el' UIViewController'. Aunque generalmente solo hay un UIViewController en pantalla a la vez (esto ha cambiado en iOS5 con los controladores de vista infantil), todavía son subcomponentes de la ventana de UI. Por ejemplo, una ventana UI tiene una propiedad rootViewController, pero viewcontrollers no tiene una propiedad de ventana. Ahora, con OSX, puede tener varias NSWindows, pero aún así administrar sus NSViewControllers respectivos. En resumen, la jerarquía es: Ventana> ViewController> Vistas – CrimsonDiego

+0

Gracias, Sí, vengo de un fondo iOS :) Digamos que tengo varias ventanas separadas en mi aplicación mac. Cuál es el enfoque de las apuestas a tomar, donde cada ventana se asignará a un WindowController o a ViewController. Por ejemplo, cuando toca dos veces un archivo en xCode, se abre una nueva ventana. – rustylepord

Respuesta

9

Con iPhone SDK y Leopard SDK, introdujeron controladores de vista o NSViewController y UIViewController. Como sus nombres sugieren lo que hacen es administrar 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 se pueden intercambiar diferentes grupos de vistas diseñados para diferentes propósitos. Por lo tanto, los controladores de vista manejan estos 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 vista múltiple. Sin embargo, no me parece que usar el 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 y iPod touch, porque solo hay una ventana para ese entorno. A diferencia de los controladores de vista, NSWindowController es para programas basados ​​en documentos. Bueno, el programa basado en documentos puede usar múltiples ventanas. Entonces, es razonable pensar que NSWindowController es para programas basados ​​en documentos como dice el documento de Apple.

+0

En el desarrollo de I iPhone usamos UIVIewControllers extensivamente, típicamente una nueva pantalla será administrada por un UIViewController. Sin embargo, en Mac, ¿es seguro asumir que esto se hace a través de NSWindowController? Al leer la documentación de Apple, parecen suponer que todas las aplicaciones de múltiples ventanas pertenecen a las aplicaciones basadas en documentos. Entonces, si estamos desarrollando una aplicación de varias ventanas como xcode, ¿eso también tiene que documentarse? Incluso IOS tiene UIWindowController, ya que sé que no está en la API publicada. – rustylepord

+0

Puede tener varias ventanas sin aplicaciones basadas en documentos. Por ejemplo, persistentes paneles/inspectores ... –

1

Vengo de iOS y comencé a codificar aplicaciones para Mac hace un tiempo, aprendiendo principalmente de la documentación de Apple.

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

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

Una vez que tenga ese derecho, comience a experimentar con NSViewController.


ACTUALIZACIÓN: Parece que desde la introducción de guiones gráficos para Mac Apps también, Apple espera que la mayor parte de la lógica de vista de presentación se deben migrar desde el más antiguo NSWindowController a la nueva NSViewController, más en línea con la forma en que se estructura una aplicación iOS. No estoy muy bien informado exactamente en donde dibuja la línea, o qué tipo de código debe permanecer en el controlador de ventana (o si todavía necesita subclases).

+0

Así que la impresión que tengo hasta ahora es porque no puede tener múltiples ventanas en iOS, el modelo es de múltiples controladores de vista en una sola ventana, aunque tenemos la impresión de que trabajamos con diferentes pantallas. Una pantalla es representada por un Viewcontroller en iOS. Pero en Mac OSX ya que puede tener múltiples ventanas, básicamente, cada ventana es administrada por un controlador de ventana y podemos incluir controladores de vista para administrar los subcomponentes. – rustylepord