15

Estoy volviendo al desarrollo de Cocoa en la Mac después de una larga temporada trabajando en el iPhone. Mi experiencia previa con Cocoa en la Mac acaba de ser pequeñas herramientas pequeñas. Estoy buscando construir algo serio.Arquitectura de la aplicación Cocoa en Mac OS X

Al mirar una aplicación moderna de Cocoa como iPhoto (o Correo o Cosas o ...) muchas aplicaciones utilizan el enfoque basado en una lista de una sola ventana. Estoy tratando de entender esto lo mejor que puedo porque parece proporcionar una buena experiencia. Sin embargo, estoy teniendo un pequeño problema. Así es como yo creo que debería ser, pero me pregunto cómo otros lo están haciendo, y lo que es realmente la mejor manera:

  • punto de la aplicación de partida es un objeto AppDelegate que, tras el lanzamiento, crea una ventana [¿Controlador?] Desde una punta, junto con la configuración de sus datos (desde, por ejemplo, CoreData)

  • WindowController carga una ventana que esencialmente solo tiene una NSSplitView.

  • El lado izquierdo de la vista dividida tiene un NSTableView o NSOutlineView que está configurado para tener el estilo SourceList.

  • El lado derecho tiene el contenido principal de la aplicación, dependiendo del elemento de la vista de tabla que se seleccione.

quiero suponer algún lugar (¿dónde?) Hay NSViewControllers la gestión de cada uno de los diferentes puntos de vista que aparecerán en el lado derecho (piense cómo iPhoto tiene todas las fotos, eventos, caras, lugares, etc. y me imagino todos podrían aparecer en diferentes plumillas ... ¿es correcto?).

Esos controladores de vista están probablemente vinculados a la lista de fuentes de la izquierda ... ¿Cómo funciona eso (la lista de fuentes está respaldada por un NSArrayController de NSViewControllers quizás?).

De todos modos, esos son mis pensamientos, ¿estoy completamente fuera de base o ...? He buscado en la web, encontré esta publicación here, y he visto algún código fuente de Apple, pero parece que no puedo entenderlo. Cualquier orientación sería bienvenida.

Respuesta

6

Romper las vistas en plumines separados es principalmente bueno si va a cambiar algunas vistas para otros, ya que puede cargarlas de forma perezosa. Y sí, en una aplicación moderna, se usaría NSViewController, o tal vez KTViewController de KTUIKit (ver the posts she co-wrote about NSViewController)

No se limite a ir corriendo a los brazos de la lista de fuentes, sin embargo. Una interfaz de una sola ventana puede ser buena para aplicaciones simples, pero puede volverse difícil de manejar rápidamente cuando tiene muchas cosas en marcha, ya que puede ser mejor si las divide en ventanas separadas; iTunes y Xcode proporcionan muchos ejemplos de esto (especialmente el último, ya que puedes cambiarlo entre SWI y MWI).

Debe pensar si una ventana múltiple o una sola ventana sería mejor para su aplicación. No hay una respuesta para todas las aplicaciones; depende completamente de su aplicación, y de lo que quiere que haga, y de la forma en que desea que se vea; usted (más el resto de su equipo, si tiene) es el único que puede responder esta pregunta.Es posible que desee hacer algunos prototipos de papel para realizar experimentos rápidos en cada dirección, de modo que pueda contener al menos ejemplos falsos de ambas UI entre sí.

+0

Ciertamente lo he pensado mucho, y creo que funciona bien para mi situación. Creo que cada vista diferente sería lo suficientemente diferente como para garantizar su propia punta, pero una vez más, no estoy seguro. Al hacer el trabajo de iPhone, raramente uso InterfaceBuilder, sin embargo, con Bindings tan bien integrado, creo que es hora de que empiece a usarlo más. También leí los artículos de Cathy, pero es otro tirón en una dirección diferente, de ahí mi confusión sobre cómo debería funcionar. – jbrennan

+0

La verdadera pregunta no es qué tan diferentes son las vistas, sino para qué las estás usando: qué objetos de modelo pondrás en ellas. Si las dos vistas muestran diferentes tipos de cosas, deberían ser vistas diferentes, cada una con su propio plumín. –

+0

Correcto, serían diferentes puntas porque muestran diferentes tipos de cosas. ¿Cómo funcionaría el cambio de punta? Cuando selecciono una fila diferente en mi Sourcelist, ¿cómo se activa una nueva plumilla? (Además, ¿debería cargar un ViewController nuevo, o simplemente cambiar la vista del lado derecho?) – jbrennan

4

Una manera fácil de obtener una idea de la forma en puntas están divididos es simplemente entrar en el directorio de iPhoto e inicie la apertura de puntas

Si desea explorar un poco más en la estructura de clases se puede tratar navegando alrededor usando F-Script

+0

He revisado algunas de sus marcas antes, pero muchas de ellas son aplicaciones anteriores, escritas antes de cosas tan agradables como NSViewController, así que me pregunto, conceptualmente, cuál es la mejor forma de construirlas con la tecnología actual. – jbrennan

+0

@cobbal ¿A qué te refieres con "empezar a abrir plumillas?" Cuando navego por los contenidos del paquete de una aplicación y, literalmente, intento abrirlos desde el Finder, se produce un error o no se muestra mucho. Dice "no se pueden abrir pliegues compilados", cuando uso el antiguo (3.2) Interface Builder o, como alternativa, solo muestro un gran icono de plumín en Xcode 4. – febeling

+0

@febeling es muy posible que esta información esté desactualizada, pero para mí Xcode (4.2) puede abrir las puntas para iPhoto ('09). – cobbal