Pagine

2012-03-04

Bindings via codice: i falsi amici

I Binding sono una benedizione del cielo, non lo si può nascondere! Con pochi click, e senza scrivere una riga di codice (o comunque scrivendone pochissime, se dobbiamo impostare qualche property aggiuntiva) possiamo aggiornare campi e controlli dell'interfaccia grafica, senza andare ad intaccare le performance dell'applicazione.

La magia che sta dietro ai Binding è ancora oscura ai più, per quanto sia largamente spiegata nella Cocoa Bindings Reference. L'importante è che, in qualsiasi condizione, questi sono in grado di semplificarci di molto il lavoro. Ma, purtroppo, la possibilità di abilitarli e configurarli direttamente dall'interfaccia grafica dell'Xcode, preclude molte possibilità ed, in alcune condizioni, non è abbastanza personalizzabile per essere utilizzata.

Per questo, ci viene in aiuto il codice, che ci permette di ottenere lo stesso risultato che si ottiene collegando i Binding dalla GUI di Xcode, tramite un metodo Cocoa. Il problema è che questo metodo non è affatto spiegato bene, e nella documentazione dedicata a lui vengono riportate informazioni al quanto generiche.
- (void)bind:(NSString*)bind toObject:(id)object withKeyPath:(NSString*)keyPath options:(NSDictionary*)options;
A prima vista, non sembrerebbe una cosa complicata: il fatto è che, appena ci si immerge nella compilazione dei parametri del metodo, ci si accorge che il valore previsto dal parametro "bind" è una semplice stringa. La domanda sorge, quindi, spontanea: cosa devo metterci lì?

La documentazione Apple non aiuta per niente. Ma gironzolando per Internet si viene a scoprire che esistono delle costanti da utilizzare per i binding predisposti da Apple: queste costanti sono elencate in questa pagina, dove è anche elencato il metodo proposto più sopra, ma le due cose non vengono collegate. Le costanti si trovano in fondo alla pagina, ma sarete voi a dover capire quali di quelle sono supportate dall'oggetto di cui dovete fare il bind.

Un ulteriore metodo molto interessante, è l'antagonista di quello precedente, ovvero:
- (void)unbind:(NSString*)bind;
Anche qui, il valore della stringa bind va ricercato tra le costanti che vi ho indicato in precedenza e, chiaramente, serve per annullare l'effetto causato dal metodo bind:toObject:withKeyPath:options:, eliminando così il binding

Nessun commento:

Posta un commento