Persistencia en dispositivos móviles - iOS
  • Introduction
  • Persistencia básica
    • El sistema de archivos
    • Serialización de clases
    • Property Lists
    • Preferencias de usuario
    • Ejercicios
  • SQLite
    • Introducción a SQLite en iOS
    • El API básico de SQLite
    • Frameworks de terceros
    • Ejercicios
  • ¡Hola Core Data!. Una aplicación de ejemplo
    • Introducción a Core Data
    • El stack de Core Data
    • Las entidades
    • Recuperar los datos
  • Modelos de datos en Core Data
    • Crear modelos
    • Entidades con clases propias
    • CRUD
    • Ejercicios
  • Más sobre modelos de datos
    • Tipos de datos transformables
    • Validaciones
    • El ciclo de vida de los objetos gestionados
    • Deshacer y rehacer operaciones
    • Ejercicios
  • Búsquedas en Core Data
    • Predicados
    • Ordenación
    • Ejercicios
  • Tablas en Core Data
    • El fetched results controller
    • Inicializar el "fetched results controller"
    • Mostrar los datos en la tabla
    • Refrescar la tabla
    • Secciones de tabla automáticas
    • Ejercicios
  • Migraciones de datos
    • Qué son las migraciones de datos
    • Versiones del modelo de datos
    • Migraciones ligeras
    • Migraciones pesadas
    • Ejercicios
    • Apéndice: migraciones en iOS<=9
  • Contextos múltiples
    • Múltiples contextos para trabajos en background
    • Comunicación entre contextos
    • Contextos anidados
    • Ejercicios
  • Persistencia como servicio
    • Backend as a Service
    • Gestión de usuarios en Firebase
    • Persistencia en Firebase
    • Ejercicios
  • Arquitecturas de aplicaciones en iOS
    • Model/View/Controller
    • Model/View/Presenter
    • Model/View/ViewModel
    • VIPER
    • Ejercicios parte I
    • Ejercicios parte II
    • Ejercicios parte III
Powered by GitBook
On this page

Was this helpful?

  1. Más sobre modelos de datos

Validaciones

PreviousTipos de datos transformablesNextEl ciclo de vida de los objetos gestionados

Last updated 6 years ago

Was this helpful?

Como ya vimos en la sesión anterior, cuando definimos el modelo de datos, para cada entidad podemos especificar una serie de reglas de validación, que varían según el tipo de datos: por ejemplo para cadenas podemos indicar una longitud mínima y máxima o una expresión regular, para fechas un rango de fechas válidas, para enteros también un rango, etc.

Eso no quiere decir que no podamos tener un objeto gestionado por Core Data con valores inválidos, ya que de lo único que se asegura el framework es que un objeto no válido no se puede guardar en el almacenamiento persistente. Es decir, los errores se disparan al hacer save del contexto.

Por ejemplo supongamos que hemos especificado que un Usuario debe tener un "nivel de usuario" como mínimo de 0, y supongamos que intentamos guardar un usuario con "nivel" negativo. Al hacer save() se disparará el error.

let miDelegate = UIApplication.shared.delegate as! AppDelegate
let miContexto = miDelegate.persistentContainer.viewContext
let usuario = NSEntityDescription.insertNewObject(forEntityName: "Usuario", into: miContexto) as! Usuario
usuario.nivel = -1
do {
  try miContexto.save()
} catch let miError as NSError {
   if (miError.code == NSValidationNumberTooSmallError) {
        print("El nivel de usuario no es válido")
   }
}

El objeto error contiene bastante información sobre el error producido: un código de error que en este caso será el 1670 (indicando "número demasiado pequeño") y además un diccionario (propiedad userInfo) con múltiples datos sobre el error. En lugar de usar los códigos numéricos de error podemos usar una serie de constantes que comienzan por NSValidation, en este caso NSValidationNumberTooSmallError indica que es un valor demasiado pequeño.

Podemos escribir nuestros propios validadores añadiéndole a la clase de la entidad un método validate<nombre_del_atributo>, o sea si el atributo se llama texto el método sería validateTexto. Este método debe lanzar una excepción si el objeto no es válido. Podéis ver un ejemplo de este tipo de validación en .

este tutorial