Introducción a Realm

0
5897

Tutorial de Realm en el que veremos como utilizar esta herramienta para persistir datos en plataformas móviles como iOS y Android.

0. Índice de contenidos

1. Introducción

En el siguiente tutorial vamos a explicar y ver como funcionan algunas funciones de Realm, aprenderemos a añadir y eliminar datos en la BBDD. La plataforma en la que vamos a realizarlo es iOS y el lenguaje a utilizar Objetive c.

2. ¿Qué es?

Realm, una nueva manera de persistir datos en plataformas movile iOS y Android. En la parte iOS es compatible tanto con Objetive-C como con Swift. Viene a ser una alternativa a Core Data, que para mi sigue siendo el referente, ya que es una framework muy madura y con un funcionamiento y rendimiento excelente.

3. ¿Por qué investigar sobre una alternativa a Core Data si funciona tan bien?

Bajo mi punto de vista no hay que ser rígido a probar las nuevas frameworks o tecnologías que aparecen, por que ¿quién sabe lo que nos estamos pediendo? y en el peor de los casos al final es aprendizaje. Pero sí que es cierto que en este caso me ha despertado la curiosidad un Benchmark que he visto en el que prometen un gran rendimiento, bastante por encima de Core Data.

El equipo de Realm lo ha conseguido haciendo que tenga una sola transición a la vez, y podemos pensar, “esto lo hará más lento” pues el hecho de no usar SQLite ha hecho que el equipo de Realm pueda optimizar el desempeño de acceso a la BBDD, incluyendo escrituras, tal y como muestran las gráficas.

imagen1

4. El objetivo

Vamos a realizar una app que podamos agregar personas con un nombre y un apellido y además podremos eliminarlas, tanto de la BBDD como de la tabla.

En este tipo de ejercicio no notaremos el rendimiento que hemos visto en el anterior Benchmark al manejar una pequeña cantidad de objetos, pero podremos ver su funcionamiento básico y poder seguir investigando y manejar grandes cantidades de datos para ver su rendimiento.

¡¡¡Vamos manos a la obra!!!

5. Entorno

El equipo donde se van a realizar las pruebas tiene las siguientes características:

  • Macbook pro 15” retina mediados de 2014.
  • Procesador: Intel Core i7 2,5 GHZ. -Memoria: 16GB 1600MHz DDR3.
  • SSD 512GB.
  • Gráficos GeForce GT 750M 2048MB.

Software necesario

  • Cocoa Pods.
  • Framework Realm.
  • Realm Browser.
  • Xcode.

6. Inicio de App de ejemplo

1.- Abrimos Objetive c y creamos un nuevo proyecto, lo podemos hacer en File / New Proyect o bien con Xcode abierto pulsando las teclas shift+cmd+N y seleccionamos Single View Application.

2.- Le damos nombre, en nuestro caso se llama RealmExample, pero podéis darle el nombre que queráis.

7. Configurar Cocoa Pods

1.- Bien, ahora lo que debemos hacer es abrir el terminal de comandos, podemos hacerlo a través de Spotlight con el siguiente comando de teclas, pulsamos cmd+espacio y tecleamos terminal, pulsamos intro y se nos abrirá nuestra consola. En nuestro caso el directorio de nuestra app es Documents / iOS / RealmExample.

2.- Una vez aquí indicamos que nuestro proyecto va a contener cocoaPods con el siguiente comando.

3.- Ya tenemos nuestro proyecto con un Pod, si a alguien estos conceptos le suenen a chino quizás debería leer sobre que es Cocoa Pods ya que en este tutrorial no se va tratar en profundidad este tema. Os dejo un enlace en el que podéis encontrar mas info: CocoaPods.

4.- Con el siguiente comando vamos a abrir nuestro Pod para indicarle las dependencias que queremos instalar.

Tenemos que conseguir que nuestro Pod quede igual que en la imagen, para ellos tendremos que añadir dos líneas:

1.- Entre target ‘RealmExample’ do y end deberemos añadir Realm.
2.- Entre target ‘RealmExampleTest’ do y end deberemos añadir Realm.Headers.

Después de esto guardamos los cambios realizados en el documento en File / Save o con cmd + S.

Para que se instalen las dependencias del framework, estando en el mismo directorio de nuestro proyecto escribimos en la terminal:

Después de esto cerramos Xcode y deberemos arrancar la aplicación desde un icono que se nos ha creado, es como el xcodeproj por defecto pero de color blanco. y la extension es xcworkspace.

7.1. Modelo

1.- Vamos a crear nuestro modelo persona para que Realm persista estos objetos en BBDD, requisito imprescindible, la clase debe heredar de RealmObject. Para ello podemos ir a File / New File o bien pulsar cmd+N. El prefijo que vamos a utilizar para las clases es AR, por lo que el nombre que en nuestro caso vamos a darle es ARPersonModel.

Si nos diera algún error debemos asegurarnos de importar el framework en la clase.

2.- En el fichero ARPersonModel.h vamos a crear las siguientes propiedades, name y lastName, y un array de tipo RLMArray. Esto nos servirá para crear un RLMArray que contenga objetos de tipo de nuestra clase ARPersonModel. Los RLMArray son subclases de de NSArray y los podremos tratar igual que ellos.

Como observáis no ponemos tipos de referencia en las propiedades por que Realm los ignora. Esto es así por que Realm tiene su propia sintaxis interna. Desde la propia página de Realm nos recomiendan no asignarle ningún tipo de atributo tipo, nonatomic, atomic, strong, copy, weak,etc.

3.- Ahora eliminaremos nuestro controlador y crearemos uno nuevo que descienda de UITableViewController para poder realizar instancias de nuestro modelo, crear nuestro “Reino” y comenzar a persistir datos. Vamos a nuestro método viewDidLoad de nuestro UITableViewController y realizamos estas acciones.

Como veis en el código primero creamos una instancia de nuestro modelo y asignamos los valores a los atributos.

A continuación creamos una instancia de Realm con el método defaultRealm de la clase RLMRealm. Esto nos crea una BBDD con el nombre default.Realm en el directorio Documents de nuestra aplicación.

Si queremos modificar la ruta de destino de la BBDD y asignarle un nombre podemos realizarlo de la siguiente manera:

Un dato importante acerca de RLMRealm es que si llamamos varias veces a la instancia en el mismo thread, se rehusa la instancia que se creó la primera vez. Hay una manera de utilizar Realm en varios threads a la vez y consiste en obtener una instancia de RLMRealm en cada thread.

En el siguiente paso iniciamos el método beginWriteTransaction. Esto nos permite convertir temporalmente nuestra BBDD en modo escritura ya que por defecto es sólo lectura. Solo puede haber abierta una transición simultáneamente ya que la operación es bloqueante. En el caso de de tener varios thread con instancias de RLMRealm se harán de uno en uno.

Ahora toca añadir los objetos, en este caso son personas, a nuestro “Reino” para persistir datos en nuestra BBDD.


Por último solo falta liberar el bloqueo de nuestro Realm y que vuelva a ser de sólo lectura. Esto lo conseguimos concluyendo la transacción con el método commitWriteTransaction.

Ahora vamos a preaparar nuestro UITableViewController para que muestre los objetos creados.

Crearemos una nueva propiedad que será nuestro “almacén de personas”.

Ahora nos falta rellenar los datos de los métodos del delegado para configurar nuestra tabla.

Deberíamos tener algo similar a lo que aparece en la siguiente imagen.

Vamos a extraer los objetos de la BBDD creada. Con la siguiente línea tendremos todos los objetos en nuestro array, y lo posicionaremos en el viewDidLoad.

Además, en el método delegado “- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath”
deberemos añadir la siguiente línea antes de configurar la celda.

Si ejecutamos la aplicacón deberían aparecer nuestros objetos guardados.

8. Borrar objetos ya persistidos

Lo primero que vamos a realizar es crearnos un método para que guarde datos y no tengamos que estar repitiendo una y otra vez las ordenes que queramos que realice Realm. Como se aprecia el método no devuelve nada y entra por parámetro un objeto de nuestro modelo.

  • Creamos nuestro “Reino” abrimos modo escritura de la BBDD.
  • Añadimos objeto a la BBDD.
  • Cerramos transición.

Vamos a alimentar a nuestra tabla y a nuestra BBDD con nuevos objetos personas. Para ello vamos a incluir una Navigation Bar a nuestra controlador.

Para ello abrimos nuestro Storyboard, pulsamos sobre nuestro controlador, y en las pestañas de arriba seleccionamos Editor / Embebed In / Navigation Controller.

También añadiremos un BarButtomItem en la parte de la derecha para añadir nuestros objetos y otro botón en la izquierda para eliminar nuestros objetos. Esto lo haremos en el método viewDidLoad.

Nuestro método para el selector debería parecerse a lo que aparece en esta imagen.

1.-Creamos el nuevo objeto que se va a añadir.

2.-Persistimos los datos y le pasamos como parámetro a nuestro método saveModel.

3.-Recargamos la tabla para que aparezcan los nuevos datos.

Eliminar datos de nuestra tabla.

Una vez ya completado el método añadir vamos a eliminar modelos tanto de la tabla como de nuestra BBDD.

La función importante para ello es añadir un método delegado del tableView que nos va a facilitar mucho la vida.

Este método cuando pulsemos sobre el botón editar que nos aparece a la izquierda nos pondrá todos los datos de la tabla en modo edición para poder eliminarlo con total facilidad. Solo con pulsar a la izquierda eliminaremos el modelo de la posición seleccionada, tanto de la BBDD como de la tabla. También podremos realizar esta acción si deslizamos la celda de derecha a izquierda.

Como veis lo más básico de Realm es lo que se trata en este tutorial y es muy fácil de utilizar, Realm tiene muchas más funcionalidades que podéis ver en la documentación oficial del equipo.

9. Conclusión

Realm es una nueva alternativa para la persistencia de datos en el mundo movile con sus puntos mas fuertes y sus puntos mas débiles. La curva de aprendizaje no es muy elevada, por lo que en este sentido no debemos preocuparnos, pero desde mi punto de vista la madurez de Core Data y su funcionamiento, es la primera opción para mí, aquí ya cada uno es libre de decidir que tecnología utilizar.

Agradeceros la lectura del tutorial.

Un saludo.

Autor: Raúl Pedraza León Desarrollador iOS Autentia Business Solutions S.L “Soporte a Desarrollo”

Enlace del proyecto a git : https://github.com/rpedrazaAutentia/RealmExample.git

Dejar respuesta

Please enter your comment!
Please enter your name here