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

Deshacer y rehacer operaciones

Core Data nos ofrece la posibilidad de deshacer y rehacer las operaciones con objetos gestionados. Así por ejemplo aunque hayamos borrado un objeto con delete, por ejemplo, podemos deshacer de modo muy sencillo el borrado. De esto se encarga el undo manager, un objeto de la clase UndoManager. En principio es algo tan simple como llamar a los métodos undo y redo de este objeto. El undo manager es accesible a través de la propiedad undoManager del contexto

//suponiendo que hayamos obtenido el contexto
let miContexto = ...
//deshacemos la última operación realizada
miContexto.undoManager?.undo()

De hecho, podríamos simplificar todavía más el código llamando a miContexto.undo(), que lo que hace en realidad es llamar al undo manager

En iOS el undo manager no está activado por defecto, de modo que inicialmente es nil. De ahí que al acceder a la propiedad undoManager obtengamos un opcional. Justo despúes de crear el contexto podemos instanciar un UndoManager y pasárselo a éste. Si estamos usando el código que genera Xcode 8 para iOS10 al marcar la casilla "use core data", el lugar apropiado es tras crear el persistent container, justo antes del return:

container.viewContext.undoManager = UndoManager()
return container

Si generamos código para iOS<10, el lugar apropiado es donde se crea el contexto de persistencia.

Una vez activado el undo manager, cuando llamamos a undo por defecto se deshacen las operaciones efectuadas en la última ejecución de código por parte de la aplicación (es decir, desde que el sistema “cede el control” a la aplicación - por ejemplo en un manejador de evento - hasta que la aplicación vuelve a “pasarle el testigo” al sistema). Así por ejemplo si al pulsar un botón del interfaz se ejecuta código que borra una lista de objetos, al deshacer se podría recuperar la lista entera, pero no cada objeto individual. No obstante, podemos llamar a beginUndoGrouping y endUndoGrouping para gestionar nosotros mismos la “atomicidad” del undo.

Por defecto con el undo manager podemos deshacer un número ilimitado de operaciones, lo que puede ser problemático con la memoria, ya que hay que “llevar la pista” de todos los cambios que se van haciendo. Para fijar el número máximo de operaciones que se puedan deshacer se puede cambiar el valor de la propiedad levelsOfUndo:.

PreviousEl ciclo de vida de los objetos gestionadosNextEjercicios

Last updated 6 years ago

Was this helpful?