NSUserDefault y Swift

En esta ocasión voy a enseñarte a guardar pequeños datos de tu aplicación con NSUserDefault y Swift.

Después de un final de año tremendo de trabajo, y dejar atrás las navidades, vuelvo a la carga.

Vamos a ver cómo podemos persistir datos en tu App, esto es que vas a poder guardar un dato, y aunque el usuario cierre la aplicación, poderlo recuperar después.

Ya hablé de la persistencia de datos en iOS en esta entrada, y te enseñaba a usar NSUserDefault pero con el lenguaje de programación Objective-C.

En esta ocasión veremos como usar NSUserDefault con el lenguaje de programación Swift.

Vamos allá, crea un nuevo proyecto y selecciona la plantilla Single View Application.

Crear la interfaz

En el ViewController dentro del Storyboard añade:

  • Un TextField que usaremos para introducir un texto
  • Una etiqueta que usaremos para mostrar el texto guardado
  • Un botón de guardar
  • Un botón de ver
NSUserDefault-y-Swift1
NSUserDefault-y-Swift1

En nuestro fichero de código, sólo necesitamos declarar dos Outlets creando sendas conexiones, una para el TextField y otra para la etiqueta, en tu archivo ViewController.swift deberías tener estas propiedades conectadas con los objetos de tu Storyboard.

 

    @IBOutlet var textField: UITextField!
    @IBOutlet var label: UILabel!

Logicamente debemos tener dos métodos declarados, un método para guardar datos y el otro para ver los datos guardados, uno conectado al botón de guardar y el otro al botón de ver.

@IBAction func guardar(sender: AnyObject) {
}

@IBAction func verDato(sender: AnyObject) {
}

A continuación vamos a declarar una constante para instanciar un objeto de la clase NSUserDefault, y una variable para recoger el dato que introducimos en el TextField, esta variable la vamos a declarar como un Optional, como indica el símbolo ? detrás del tipo de la variable.

    let dato = NSUserDefaults()
    var datoTextField:String?

Por último vamos a implementar los métodos, primero el que guardará el dato.

@IBAction func guardar(sender: AnyObject) {
        datoTextField = textField.text! as String
        dato.setObject(datoTextField, forKey: "key")
        dato.synchronize()
    }

En la primera linea asignamos a la variable el texto introducido en el TextField.

La segunda linea puede resultar igual de sencilla que la anterior, pero nada más lejos de la realidad, usamos el objeto de la clase NSUserDefault, y para guardar el dato usamos la siguiente función de la clase:

func setObject(value: AnyObject?, forKey defaultName: String)

Esto es importante, observa nuestro código y la función de la clase, compara ambas sentencias y saca tus propias conclusiones:

func setObject(value: AnyObject?, forKey defaultName: String)
dato.setObject(datoTextField, forKey: "key")

Con «setObject» indicamos que queremos guardar un dato, y le damos el valor que queremos guardar «datoTextField», lo hacemos con una key o clave, la clave o key es como una contraseña para acceder al dato en cuestión, en nuestro caso hemos usado el String «key», y es este mismo String el que tenemos que usar para recuperar el dato.

Por último, en la tercera linea, usamos la función synchronize para actualizar el dato guardado, esta última opción no es obligatoria pero conviene siempre añadirla cuando usemos NSUserDefault.

Ahora vamos a implementar el método para mostrar el dato que acabamos de guardar.

@IBAction func verDato(sender: AnyObject) {
        label.text = dato.objectForKey("key") as? String
    }

En esta ocasión usamos el método objectForKey para recuperar el dato, esta es la función que Apple ha creado para nosotros dentro de la clase NSUserDefault:

func objectForKey(defaultName: String) -> AnyObject?

Fíjate que en esta ocasión no usamos «setObject» sino «objectForKey» y usamos la misma «contraseña» o key para acceder al dato guardado.

KVC

NSUserDefault funciona a través de KVC o Key Value Observing.

KVC es un mecanismo que nos permite acceder a las propiedades de los objetos de forma indirecta, para ello se usa una clave o key para acceder a dicha propiedad.

Para entender KVC sería necesario otra entrada, así que tomo nota para escribir una en cuanto saque un rato.

Espero que este articulo te haya servido de ayuda, y que de ahora en adelante, puedas guardar datos de forma persistente en tus aplicaciones usando NSUserDefault y Swift.

Aquí puedes descargar el código de ejemplo

Si tienes cualquier duda o quieres decirme algo déjame un comentario 😉

About The Author
iOS Developer & Instructor at CFE Apps. Enseño a crear aplicaciones iOS a todo el que quiera aprender.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.