Cocoa e il mistero del predicato perduto (Parte seconda: The Fog)

Con la precedente puntata ci siamo lasciati svelando il mistero legato al “fetch predicate” di un oggetto NSTreeController; non sembra però diradarsi la nebbia di mistero che avvolge il mondo Cocoa.Sembra che proprio l’astrazione NSTreeController sia quella maggiormente pregna di misteri e trabocchetti.

Diciamo da subito che in questo caso non siamo di fronte ad un nuovo “predicato perduto”, ma ci sembrava doveroso collocare questo discorso a seguire, in una ideale continuità con il mistero precedente: un “sequel”, insomma, come ogni buon film di cassetta, con tanto di aberrazioni rispetto alla storia originale.

Arcani e oscuri dunque sono i metodi di NSTreeController ed il modo di utilizzarli: le cose si fanno ancora più esoteriche quando si metta il tutto in relazione a Core Data, altro “enigmatico strumento”.

Abbiamo già detto come Core Data sia stato forgiato a somiglianza di basi dati relazionali senza raggiungerne l’immagine speculare; tra i limiti di questa somiglianza è da considerare l’assenza di direttive di ordinamento e raggruppamento dei dati quali conosciamo nei RDBMS (mediante espressioni quali ORDER BY, GROUP BY, note a chi “mastica” di SQL).

La conseguenza più evidente è la comune accettazione che le informazioni rese persistenti un contesto Core Data non sono restituite in modo ordinato, ne per attributo, ne tanto mento per epoca di creazione. Ma è questo realmente un limite di Core Data come gli si imputa? O di nuovo siamo davanti ad una non comprensione dei ruoli.

E’ forse compito del modello manipolare i dati? Non sarà che in un paradigma MVC è compito del controller?

Core Data rappresenta il livello Modello nel paradigma MVC: l’ordinamento dei dati è un compito di presentazione e dunque più propriamente compito del livello Controllo.

Il vero mistero sarebbe allora l’assenza di strumenti utili a compiere questi aggiustamenti di presentazione in astrazioni di controllo quali NSArrayController e NSTreeController, dati appunto allo scopo di soddisfare le necessità della stragrande parte degli oggetti di Visualizzazione in Cocoa (omettiamo NSObjectController che non è adatto alla gestione di aggregati di dati).

Eppure sembra che le soluzioni all’ordinamento di dati Core Data vengono spesso ricercate in implementazioni personali, artistiche, complesse ma inutili.

La soluzione è invero a portata di mano ed è rappresentata da una istanza di oggetto NSSortDescriptor. enterprise portal software . Questi oggetti sono introdotti nel framework al solo scopo di descrivere criteri di ordinamento di informazioni quali quelle di un oggetto container.

Se il Modello offerto da Core Data viene gestito dunque in modo semplice ed ottimizzato da istanze di oggetti controller, possibile che questi non abbiano metodi di ordinamento dei “managedObjects” il cui risultato sia esposto nei “arrangedObjects”? Non è credibile.

Tra i compiti degli oggetti di controllo container (NSArrayController e NSTreeController) c’è infatti anche la realizzazione di un ordinamento dei dati: questo avviene per mezzo del metodo -setSortDescriptors.

Qualsiasi sia l’ordine dei dati internamente al contesto di Core Data, il controller sarà in grado di imporre un proprio ordine, manipolando l’insieme dei dati a favore di una visualizzazione utile all’utente finale.

L’ordinamento non è mantenuto nella persistenza ma “calcolato” ogni volta dal controller: eventualmente si può mantenere persistente l’indicatore con cui l’utente impone un proprio ordinamento, ma l’azione vera e propria di ordinamento sarà eseguita dal controller.

Così un NSSortDescriptor che imponga un ordinamento lessicografico su un attributo del modello risulterebbe indipendente da interventi utente, mentre un NSSortDescriptor che imponga un ordinamento rispetto ad altro attributo concepito come “peso” della posizione indicata dall’utente risulterà strumento efficace ad ordinare le informazioni secondo quanto chiesto dall’utente. longboard wheels . Nessun codice accessorio è necessario.

Ci sembra con questo di aver concluso con i misteri.

In realtà si potrebbe concludere con un elogio della autosufficienza del framework Cocoa che dovrebbe essere naturalmente ovvia; Cocoa è framework del sistema MacOSX, e non un generico framework per sviluppo software compatibile-con; dunque in se deve avere tutto o quasi il necessario a risolvere le questioni di implementazione dei più comuni paradigmi di interfaccia utente introdotti nel HIG (Human Interface Guideline) di Apple. E questo riesce a fare, migliorandosi ad ogni revisione.


Posicionamiento web SEO