20

Provengo dallo sfondo iOS e inizio a imparare Cocoa. Su iOS a meno che non ci siano più destinazioni per iPad e iPhone di solito abbiamo una finestra e gestiamo lo schermo utilizzando UIViewControllers. Dove ogni nuova schermata verrà mappata per la maggior parte del tempo a UIViewController.Differenza tra NSWindowController Vs NSViewController

Tuttavia sul cacao questa sembra essere la seconda strada in cui una nuova schermata/finestra è gestita da NSWindow ed i suoi sottocomponenti sono gestiti da NSViewController. Quindi, se ho un'applicazione per più finestre, dovrei avere separato NSWindowController per ogni finestra.

Questo approccio è corretto o sto avendo un malinteso?

+0

Quello che non hai detto qui (e dovrebbe chiarire) è che stai venendo da iOS e ora stai iniziando a lavorare con la programmazione su MacOS, corretto? –

+1

Hai un po 'indietro sulla parte iOS. 'UIViewController' non gestisce' UIWindow' - 'UIWindow' gestisce' UIViewController'. Sebbene di solito sullo schermo sia presente un solo UIViewController alla volta (questo è cambiato in iOS5 con i controller di visualizzazione figlio), sono ancora sottocomponenti dell'UIWindow. Caso in questione, una UIWindow ha una proprietà rootViewController, ma i viewcontrollers non hanno una proprietà window. Ora, con OSX, è possibile avere più NSWindows, ma gestiscono comunque i rispettivi NSViewControllers. In breve, la gerarchia è: Finestra> ViewController> Visualizzazioni – CrimsonDiego

+0

Grazie, Sì, sto venendo da uno sfondo iOS :) Diciamo che ho più finestre separate sulla mia applicazione mac. Qual è l'approccio delle puntate da prendere, in cui ogni finestra verrà mappata a una finestraController o a viewController. Ad esempio quando si tocca due volte un file in xCode si apre una nuova finestra. – rustylepord

risposta

9

Con iPhone SDK e Leopard SDK, hanno introdotto i controller di visualizzazione, o NSViewController e UIViewController. Come i loro nomi suggeriscono quello che fanno è gestire le viste

I controller di vista servono per la gestione delle viste. L'attuale tendenza nella progettazione dell'interfaccia utente è Single Window, Multiple View. Ciò che significa è che c'è una finestra e all'interno di essa, un diverso gruppo di viste progettato per scopi diversi può essere scambiato dentro e fuori. Quindi, i controller di visualizzazione li gestiscono per i programmatori per un modello ben definito. Attualmente i controller di visualizzazione sono molto importanti per la programmazione di iPhone e iPod touch, poiché la piattaforma è basata su modelli a finestra singola e a vista multipla. Tuttavia, non mi sembra che usare il controller di visualizzazione sia molto popolare per Mac. come circa il controller di finestra come NSWindowController? La sua controparte, UIWindowController, non esiste per l'ambiente iPhone e iPod touch, perché c'è solo una finestra per quell'ambiente. A differenza dei controller di visualizzazione, NSWindowController è per programmi basati su documenti. Bene, il programma basato su documenti può usare più finestre. Quindi, è ragionevole pensare che NSWindowController sia per programmi basati su documenti come dice il documento di Apple.

+0

Nello sviluppo di I iPhone usiamo UIVIewControllers in genere in genere una nuova schermata sarà gestita da un UIViewController. Tuttavia su Mac è sicuro assumere che ciò avvenga tramite NSWindowController? Leggendo su Apple Documentation sembra che presumano che tutte le app multi finestra appartengano a app basate su documenti. Quindi, se stiamo sviluppando un'app multi finestra come xcode, anche questo deve essere basato su documenti? Persino IOS ha UIWindowController perché so che non è nell'API pubblicata. – rustylepord

+0

È possibile avere più finestre senza app basate su documenti. Ad esempio, pannelli/ispettori persistenti ... –

1

Vengo anche da iOS e ho iniziato a codificare le app Mac qualche tempo fa, imparando principalmente dalla documentazione di Apple.

La mia impressione è che sul desktop, non è quasi mai necessario NSViewController s (una grande eccezione sarebbe una finestra con schede e più viste, come la schermata di benvenuto di GarageBand).

La maggior parte delle volte si dispone di uno NSWindowController per finestra. Scopri prima la relazione tra NSWindow e NSWindowController (e NSDocument, se stai creando un'app per documenti).

Una volta che hai capito bene, inizia a sperimentare con NSViewController.


UPDATE: Sembra che dopo l'introduzione di storyboard per Mac apps troppo, Apple si aspetta che la maggior parte della logica vista di presentazione devono essere migrati dal vecchio NSWindowController al più recente NSViewController, più in linea con come è strutturata un'app per iOS. Non sono molto ben informato su esattamente dove per disegnare la linea, o quale tipo di codice deve rimanere nel controller della finestra (o se deve ancora essere sottoclasse).

+0

Quindi l'impressione che ho ottenuto finora è che non è possibile avere più finestre su iOS, il modello è più controller di vista in un'unica finestra, anche se abbiamo l'impressione che lavoriamo con schermi diversi. Uno schermo è rappresentato da un Viewcontroller su iOS. Ma su Mac OSX poiché è possibile avere più finestre, in pratica ciascuna finestra è gestita da un controller di finestre e possiamo includere controller di visualizzazione per gestire i componenti secondari. – rustylepord

Problemi correlati