Translate

viernes, 3 de febrero de 2012

XCode: Cocoa Bindings


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:

Unknown dijo...

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