Bindings
es una tecnología en Cocoa que nos permite sincronizar objetos. Es una
herramienta que facilita la comunicación entre objetos y supone una adaptación
de la metdología MVC (Model-View-Controller). Básicamente permite realizar una
conexión entre el atributo de un Object view (un objeto usado para mostrar
valores), y un objeto usado para almacenar ese valor.
Por
ejemplo, supongamos un campo Edit y una variable temperatura. Podremos hacer un
binding entre ellos de manera que si cambio el valor de la variable se cambiará
automáticamente el contenido del campo Edit, y viceversa.
Vamos
a realizar un ejemplo donde tendremos un slider horizontal sincronizado con un
campo de edición, de manera que si muevo el slider, se actualizará el edit, y
si escribo un valor en este último se actualizará la posición del slider.
Creamos
un proyecto que llamaremos binding.
Iremos
a la ventana y colocaremos dos componentes, un NSEdit y un NSSlider como se
muestra en la imagen siguiente:
La
forma de realizar esto usando el tradicional MVC sería usando outlets y action,
esto es, para cada componente creamos un outlet que los referencie, y después
un action que se asigne a ambos componentes.
Dicho
action detecta cual de los dos componentes es el sender, para primero leer el
valor del componente y después actualizar dicho valor en el otro componente.
Esto
supone tener que escribir algo de código, que para un ejemplo simple como este
no supone mayor problema, pero si necesitásemos conectar objetos más
complicados como tablas de datos que necesitan actualizar a su vez otras
tablas, o componentes la cosa se complica. Para eso emplearemos la tecnología
Binding.
Lo
primero sería crear una clase que defina al objeto que mantendrá el valor.
Crearemos la clase “Valor”.
Dentro
de esta implementaremos un objeto que simplemente tendrá un atributo que se
llamará “miValor” de tipo double.
Una
vez creado vamos al Interface Builder y añadiremos un NSObject que vincularemos
a esta clase recién creada.
Añadimos
ahora un Object Controller que vincularemos al objeto de la clase creado
anteriormente, y además añadiremos un Key que referencie al atributo miValor de
la clase Valor.
Por
último nos queda por establecer los bindings entre el atributo miValor de la
clase Valor y los dos componentes, de manera que se mantengan sincronizados, es decir, que cambiado uno de ellos afecte automáticamente al otro.
Para
ello seleccionamos el primer componente, la barra y vamos al binding inspector.
Expandimos la opción Value y la configuramos como se muestra:
Repetimos
la misma acción para configurar el binding del campo edit.
Y
ejecutamos el programa. En este punto cualquier cambio en cada uno de los
componentes afecta al otro, es decir si muevo la barra se mostrará el valor en
el campo edit, y si en este pongo un número entre 0 y 100 la barra se colocará
en esa posición.
Esta
es la forma en la que el uso de Bindings nos permite reducir la cantidad de
código a escribir, facilitándonos la programación.
1 comentario:
Buen artículo Uge. Yo siempre que puede los uso, también en el trabajo con .Net.
Otra ventaja es que el rendimiento es mayor, ya que la ejecución sólo tiene que llegar a la capa de vista donde todo está definido.
Un bratzo
Publicar un comentario