Trabajando con iCloud Core Data Integration

Mantener los datos de la aplicación sincronizados entre dispositivos es una tarea compleja y desalentadora. Afortunadamente, esa es exactamente la razón por la que Apple construyó iCloud. En esta serie Tuts + Premium, aprenderá cómo funciona iCloud y cómo sus aplicaciones pueden compartir datos a la perfección en múltiples dispositivos.


También disponible en esta serie:

  1. Trabajando con iCloud: Introducción
  2. Trabajando con iCloud: Almacenamiento de valor-clave
  3. Trabajando con iCloud: Almacenamiento de documentos
  4. Trabajando con iCloud: Core Data Integration

En las instalaciones anteriores de esta serie, hemos reformulado nuestra aplicación de muestra para cambiar de iCloud Key-Value Storage a iCloud Document Storage. El almacenamiento de documentos de iCloud es mucho más flexible que el almacenamiento de valor clave y, por lo tanto, es más adecuado para aplicaciones de datos pesados. Core Data es un marco de persistencia creado para aplicaciones que administran grandes cantidades de datos y modelos de datos complejos. A lo largo de los años, Core Data se ha ganado sus franjas y se lo conoce como un marco confiable y flexible para la persistencia de datos. Esta serie no estaría completa sin discutir los datos básicos y su integración con iCloud.


Tipos de aplicaciones de datos básicos

En términos de Datos Básicos, hay dos tipos de aplicaciones, (1) aplicaciones basadas en documentos y (2) aplicaciones de estilo de biblioteca. Las aplicaciones basadas en documentos, como la aplicación Pages de Apple, administran documentos respaldados por un almacén de Core Data. Las aplicaciones de estilo de biblioteca, como la aplicación de música incorporada del iPhone, utilizan una única tienda persistente que se usa en toda la aplicación.

En este tutorial, analizaré ambos tipos de aplicaciones y dibujaré una descripción general de alto nivel de cómo cada tipo de aplicación puede integrarse con iCloud. Core Data es un tema muy amplio y uno de los aspectos más avanzados del desarrollo de Mac e iOS. Este tutorial solo resaltará lo que es posible y las opciones de integración disponibles con iCloud..


Aplicaciones basadas en documentos

Documento UIManaged

Documento UIManaged es una subclase concreta de UIDocumento y está diseñado para adaptarse a las necesidades de las aplicaciones basadas en documentos Core Data. Para aplicaciones basadas en documentos., Documento UIManaged ofrece lo mejor de dos mundos, (1) UIDocumentoLa facilidad de uso y (2) soporte integrado de datos básicos. Vale la pena mencionar que Documento UIManaged se puede utilizar incluso si no hay necesidad de integración con iCloud. Aunque Documento UIManaged A menudo se menciona en el contexto de iCloud, es útil tomarse un momento y subrayar los beneficios de la Documento UIManaged clase en si.

Al igual que su superclase., UIDocumento, Documento UIManaged hace que la gestión de documentos sea fácil y directa. La diferencia clave con UIDocumento es eso Documento UIManaged Está dirigido específicamente a los datos básicos. Ambos UIDocumento y Documento UIManaged Tengo mucho que ofrecer fuera de la caja. Recuerda del tutorial anterior que UIDocumento las funciones de guardado automático, y las operaciones de carga y guardado se manejan en una cola de fondo mientras se abstraen los detalles esenciales. Si decide utilizar Core Data en una aplicación basada en documentos, se recomienda utilizar Documento UIManaged incluso si iCloud no está en la lista de características de su aplicación.

Antes de la introducción de Documento UIManaged, La pila de datos principales se configuró y configuró tradicionalmente en el delegado de la aplicación. Esto ya no es necesario cuando se usa Documento UIManaged. Una de las sutilezas de la Documento UIManaged clase es su pila de datos Core incorporada. Después de inicializar una instancia de Documento UIManaged, una pila completa de Datos Core está disponible para usted. Documento UIManagedLa interfaz expone un contexto de objeto gestionado, así como el coordinador de tienda persistente y el modelo de objeto gestionado. Configurar el coordinador de tienda persistente es tan fácil como proporcionarle a un diccionario opciones como las que realiza al inicializar manualmente un coordinador de tienda persistente.

Como su nombre lo indica, Documento UIManaged es una subclase concreta de UIDocumento, lo que significa que se puede utilizar como está, sin necesidad de subclases UIDocumento. Entre bastidores, Documento UIManaged agrega automáticamente los modelos de objetos administrados que encuentra en su paquete de aplicaciones y prepara una pila de Datos Core para que pueda trabajar. Si su aplicación tiene requisitos más complejos, entonces depende de usted la subclase Documento UIManaged para cumplir con esos requisitos.

Facilidad de uso

Cualquier persona familiarizada con Core Data sabe que los cambios se confirman en el almacén persistente al enviar el contexto del objeto administrado a salvar: mensaje. Esto ya no es necesario cuando se usa Documento UIManaged. No solo esto no es necesario, debe ser evitado. La razón es que, bajo el capó., Documento UIManaged Gestiona un contexto de objeto gestionado privado. Este contexto de objeto administrado privado administra un contexto de objeto administrado secundario, que es el contexto de objeto administrado expuesto a través de Documento UIManagedLa interfaz pública. Al enviar el contexto de objeto gestionado hijo a salvar: mensaje, los cambios solo se confirman en el contexto del objeto gestionado principal y no en el almacén persistente que gestiona el contexto del objeto gestionado principal.

En resumen, deberías usar el familiar UIDocumento Métodos para guardar los cambios en el almacén persistente, el resto se cuida entre bastidores. Hay una razón por la cual Documento UIManaged hereda de UIDocumento!


Aplicaciones Basadas en la Biblioteca

Las aplicaciones basadas en bibliotecas, como las aplicaciones de música y fotos incorporadas en el iPhone, generalmente administran una pila de Datos Core con un coordinador de tienda persistente y una tienda persistente.


Bajo el capó

Es posible que se esté preguntando cómo funciona Core Data con iCloud bajo el capó. Esto depende del tipo de tienda que utilice, es decir, (1) un SQLite o (2) una tienda binaria (atómica). En la mayoría de los casos de uso, se recomienda optar por SQLite. Sin embargo, si trata con pequeñas cantidades de datos, entonces una tienda binaria también es una opción. A la luz de iCloud, la principal desventaja de una tienda binaria es que cada cambio resulta en la sustitución de toda la tienda. Esto no solo es ineficiente, sino que puede potencialmente generar importantes implicaciones en el rendimiento si la tienda aumenta de tamaño. En el resto de esta discusión, me centraré en SQLite como la tienda de respaldo.

Con SQLite como la tienda de respaldo, la principal ventaja es que los cambios se propagan de forma incremental en lugar de reemplazar toda la tienda con cada cambio confirmado. Para comprender cómo Core Data y iCloud trabajan juntos, es importante saber que la base de datos SQLite no está almacenada en iCloud. En cambio, cada cambio se registra en los llamados registros de transacciones y esos registros se utilizan para propagar cambios a través de dispositivos. Los registros de transacciones son ligeros y dan como resultado un proceso de sincronización eficiente, rápido y detallado. Los registros de transacciones se almacenan en un directorio en el contenedor de iCloud. La ubicación exacta se puede especificar configurando NSPersistentStoreUbiquitousContentURLKey Teclee el diccionario de opciones que se pasa al coordinador de tienda persistente..

Otro aspecto vital de la sincronización es mantener la interfaz de usuario actualizada. Al usar Core Data, esto puede lograrse registrando los controladores apropiados como observadores de NSPersistentStoreDidImportUbiquitousContentChangesNotification Notificaciones, que se envían cada vez que se propaga un cambio remoto. Sobre la base de los cambios, su aplicación puede actualizar la interfaz de usuario para reflejar los cambios confirmados en su almacén persistente local.


Fusionando

Otra ventaja clave de Core Data es el control granular que tiene sobre sus datos y esto es especialmente cierto con respecto a la fusión de datos, una parte esencial del trabajo con iCloud. Gracias a esta granularidad, que solo es posible gracias al uso de registros de transacciones, la mayor parte de la fusión se realiza automáticamente mediante Core Data.


Pensamientos de cierre

El hilo común a lo largo de esta serie ha sido cómo sus aplicaciones pueden beneficiarse de iCloud y cómo integrarse con iCloud. Quiero terminar esta serie exponiendo algunas advertencias que quizás deba tener en cuenta al agregar el soporte de iCloud a una aplicación. En la segunda y tercera entrega de esta serie, te mostré cómo usar NSFileManageres URLForUbiquityContainerIdentifier: Método para obtener una referencia a un contenedor iCloud específico para almacenar datos en iCloud. En nuestros ejemplos, siempre asumimos que iCloud estaba habilitado en los dispositivos con los que trabajamos, pero
Este no siempre será el caso. Por lo tanto, es importante contar con una solución alternativa para situaciones en las que iCloud no está habilitado. A continuación se presentan dos ejemplos para ilustrar mejor estas advertencias..

El primer ejemplo es cuando un usuario no tiene una cuenta de iCloud o no ha iniciado sesión con su cuenta de iCloud en el dispositivo. Esto significa que su aplicación no puede acceder al contenedor de iCloud en el que intenta almacenar datos. Se vuelve aún más compleja cuando habilita iCloud después de haber usado su aplicación durante algunas semanas. El usuario esperará que sus datos se sincronicen a través de sus dispositivos. En otras palabras, necesitará una forma de transferir los datos desde el sandbox de la aplicación al contenedor de iCloud.

El segundo ejemplo se centra en la persistencia de los datos. ¿Qué sucede cuando un usuario ha habilitado iCloud en su dispositivo, pero después de unas semanas decide iniciar sesión con una cuenta de iCloud diferente? Los datos almacenados en el contenedor de iCloud ya no están disponibles para el usuario debido a que se está utilizando una cuenta de iCloud diferente. Esta es una medida de seguridad puesta en marcha por Apple. Los datos están vinculados a una cuenta de iCloud, no a un dispositivo. Por lo tanto, no se puede acceder a los datos cuando se utiliza una cuenta de iCloud diferente. Es raro que un usuario tenga varias cuentas de iCloud, pero es importante conocer esta posibilidad y las consecuencias que puede tener..


Conclusión

Espero que esta serie sobre iCloud le haya dado una buena idea de qué es iCloud y qué puede hacer por usted como desarrollador. La idea básica detrás de iCloud es simple y adoptar iCloud es relativamente fácil si el modelo de datos de su aplicación no es demasiado complejo. Sin embargo, esta última entrega ha demostrado que la integración de iCloud puede volverse muy compleja cuando aumenta la complejidad del modelo de datos de su aplicación..