Nel paradigma MVC, il modello deve essere separato dalla vista. Per ottenere i dati di cui ha bisogno per disegnare da sé, chiede il Controller per questo, che a sua volta chiede al Modello di farlo. In questo modo, disaccoppiamo le informazioni dalla GUI. Pensala come Model Controller View se ti aiuta. Pertanto, nella maggior parte dei casi, il controllore "possiede" il modello.
Ad esempio, in cs193p, il CalculatorViewController
(Controller) ha una proprietà CalculatorBrain
(Modello), con cui interagisce per visualizzare i risultati delle equazioni nella Vista.
Nel vostro esempio particolare, la SolarSystemViewController
sarebbe probabilmente hanno un forte riferimento alla SolarSystem
, quale sarebbe il polling per i dati che avrebbe mano dal l'SolarSystemView
in modo che potesse disegnare se stesso quando aveva bisogno di un aggiornamento. Il SolarSystemView
potrebbe anche notificare allo SolarSystemViewController
quando l'utente interagisce con esso in modo che possa visualizzare altre visualizzazioni o aggiornare SolarSystem
, tra le altre attività che potrebbe eseguire.
Si noti che il paradigma MVC in Cocoa e Cocoa Touch è un po 'diverso rispetto alla versione più generalizzata di MVC, come Smalltalk. Ad esempio, se osservi lo Wikipedia page on MVC, il diagramma dovrebbe apparire diverso da quello che hai imparato. In effetti, GoF (Design Patterns) descrive così MVC.
MVC è costituito da tre tipi di oggetti. Il Modello è l'oggetto dell'applicazione , la Vista è la sua presentazione sullo schermo e il Controller definisce il modo in cui l'interfaccia utente reagisce all'input dell'utente. Prima di MVC, i progetti di interfaccia utente tendevano a raggruppare questi oggetti. MVC li disaccoppia per aumentare la flessibilità e il riutilizzo. MVC disaccoppia le viste e i modelli stabilendo un protocollo di sottoscrizione/notifica tra di loro. Una vista deve garantire che il suo aspetto rifletta lo stato del modello. Ogni volta che i dati del modello cambiano, il modello notifica le viste che dipendono da . In risposta, ogni vista ha l'opportunità di aggiornare lo stesso . Questo approccio consente di allegare più viste a un modello su e fornire presentazioni diverse. È anche possibile creare nuove viste per un modello senza riscriverlo.
In entrambi questi casi, il Modello stesso sta contattando la Vista per aggiornarlo. Tuttavia, su iOS, l'interazione tra il modello e la vista viene gestita tramite il controller. Questo è ben spiegato nel first session of cs193p così come Apple's own documentation on MVC relationships. In questo modo, avete solo bisogno di riscrivere il codice di controllo di riutilizzare i modelli e le Visualizzazioni altrove.
Ecco lo schema MVC da cs193p per chiarire.

che copre completamente quello che ho chiesto; Ho un'ulteriore richiesta. Cosa dovrebbe fare il "tick" -ing? Dovrebbe ovviamente esserci un segno di spunta affinché i pianeti continuino a muoversi. Se ho capito bene, sarebbe il controllore che sarebbe proprio un timer, a quel punto avrebbe chiamato per il modello da modificare, quindi il recupero dei dati dal modello e la visualizzazione sullo schermo, giusto? Questo potrebbe essere contenuto per una domanda separata. –
@CarterPape Sì, che suona giusto per me. Il Controller di solito gestisce gli aggiornamenti del Modello e quindi notifica le Viste che si basano su di esso per l'aggiornamento. Ad esempio, nel controllore esisterebbe il ciclo di esecuzione di un gioco e ogni frame che notificherebbe agli agenti nel gioco (il modello) di aggiornarsi, prima di notificare la vista (ad esempio un GLKView) per aggiornarsi. – Metabble