15

Sto tornando allo sviluppo Cocoa sul Mac dopo un lungo periodo di lavoro con iPhone. La mia precedente esperienza con Cocoa su Mac è stata solo un piccolo strumento. Sto cercando di costruire qualcosa di serio.Architettura dell'applicazione Cocoa su Mac OS X

Guardando una moderna applicazione Cocoa come iPhoto (o Mail or Things o ....) molte app usano l'approccio basato su Single-Window, Source-List. Sto cercando di spiegarmelo meglio che posso perché sembra offrire una buona esperienza. Tuttavia, sto avendo un piccolo problema. Ecco come penso che dovrebbe guardare, ma mi chiedo come gli altri lo stanno facendo, e che cosa è davvero il modo migliore:

  • Punto di partenza della app è un oggetto AppDelegate che, dopo aver lanciato, crea una finestra [Controller?] Da un pennino, insieme all'impostazione dei suoi dati (da, ad esempio, CoreData)

  • WindowController carica una finestra che in pratica contiene solo un NSSplitView.

  • Il lato sinistro della vista split ha un NSTableView o NSOutlineView che è impostato per avere lo stile SourceList.

  • La parte destra ha il contenuto principale dell'app, a seconda di quale elemento della vista tabella è selezionato.

Vorrei assumere da qualche parte (dove?) Ci sono NSViewControllers gestiscono ciascuno dei diversi punti di vista che appariranno nella parte destra (si pensi come iPhoto ha tutte le foto, eventi, volti, luoghi, ecc e immagino potrebbero apparire tutti in pennini diversi ... è corretto?).

Questi controller di vista sono probabilmente associati all'elenco di origine sulla sinistra .. come funziona (l'elenco di origini è supportato da un NSArrayController di NSViewControllers forse?).

In ogni caso, quelli sono i miei pensieri, sono completamente fuori base o ...? Ho cercato sul Web, ho trovato questo post here e ho guardato qualche codice sorgente Apple ma non riesco a spiegarmelo. Qualsiasi guida sarebbe gradita.

risposta

6

Rompere le viste in pennini separati è particolarmente utile se si desidera scambiare alcune visualizzazioni con altre, poiché è possibile caricarle pigramente. E sì, in un'applicazione moderna, si usa NSViewController, o forse KTViewController da KTUIKit (vedi the posts she co-wrote about NSViewController)

Non basta andare a correre tra le braccia della lista sorgente, tuttavia. Un'interfaccia a finestra singola può essere utile per le app semplici, ma può diventare rapidamente ingombrante quando si verificano molti problemi, in quanto potrebbero essere meglio suddivisi in finestre separate; Sia iTunes che Xcode forniscono molti esempi di questo (specialmente quest'ultimo, poiché è possibile cambiarlo tra SWI e MWI).

È necessario valutare se un'interfaccia a finestra multipla o a finestra singola sarebbe migliore per l'app. Non esiste una risposta per tutte le app; dipende interamente dalla tua app, da ciò che vuoi che faccia e da come vuoi che guardi: tu (più il resto del tuo team, se ne hai uno) sei l'unico che può rispondere a questa domanda.Potresti voler fare alcuni prototipi di carta per fare rapidi esperimenti in ogni direzione in modo da poter tenere almeno un falso esempio di entrambe le interfacce utente l'una contro l'altra.

+0

Ho sicuramente pensato molto e penso che funzioni bene per la mia situazione. Penso che ogni visione diversa sarebbe abbastanza diversa da giustificare il proprio pennino, ma di nuovo non ne sono sicuro. Quando lavoro con iPhone ho usato raramente InterfaceBuilder, tuttavia con Bindings che è così ben integrato con esso, penso che sia ora di iniziare a usarlo di più. Ho letto anche gli articoli di Cathy, ma è ancora un altro strattone in una direzione diversa, da qui la mia confusione su come dovrebbe funzionare. – jbrennan

+0

La vera domanda non è quanto siano diverse le visualizzazioni, ma a cosa le stai usando per: quali oggetti del modello inserirai. Se le due viste mostrano diversi tipi di cose, dovrebbero essere viste diverse, ciascuna con il proprio pennino. –

+0

Giusto, sarebbero pennini diversi perché mostrano diversi tipi di cose. Come funzionerebbe la commutazione dei pennini? Quando seleziono una riga diversa nel mio Sourcelist, come viene attivato un nuovo pennino? (Inoltre, dovrebbe caricare un nuovo ViewController, o semplicemente scambiare la vista sul lato destro?) – jbrennan

4

Un modo semplice per ottenere un tatto per il modo in cui pennini sono suddivisi è quello di andare solo nella directory iPhoto e iniziare aprendo pennini

Se si vuole esplorare un po 'di più nella struttura di classe si può provare curiosare usando F-Script

+0

Ho esaminato alcuni dei loro pennini prima, ma molti di loro sono vecchie applicazioni, scritte prima di cose così piacevoli come NSViewController, quindi mi chiedo, concettualmente, qual è il modo migliore per costruirle data la tecnologia di oggi. – jbrennan

+0

@cobbal Cosa intendi per "iniziare ad aprire i pennini?" Quando sfoglio il contenuto del pacchetto di un'applicazione e cerco letteralmente di aprirli dal Finder, questo genera un errore o non mostra molto. Dice "i pennini compilati non possono essere aperti", quando uso il vecchio (3.2) Interface Builder, o in alternativa mostro un'icona enorme di pennino in Xcode 4. – febeling

+0

@febeling è abbastanza probabile che questa informazione sia ormai superata, ma per me Xcode (4.2) può aprire i pennini per iPhoto ('09). – cobbal