¿Qué hacer cuando el usuario activa o desactiva la compatibilidad con iCloud en el paquete de configuración de la aplicación?

Estoy apuntando iOS7 y yo uso iCloud con una UIManagedDocument. Quisiera saber que hacer en estos dos casos:

1) Primer caso: primer lanzamiento de la aplicación

Es el primer lanzamiento, cuando aún no sabemos si el usuario quiere usar iCloud o no y debemos asumir que no quiere usarlo hasta que se lo preguntemos. Una vez que lo averigüemos, su elección se almacenará en el paquete de configuración de la aplicación y podrá cambiar de opinión más tarde.

Cuando se inicia mi aplicación, la primera vista que aparece activa el inicio de UIManagedDocument con [[UIManagedDocument alloc] initWithFileURL:url]. Hace esto porque debe saber cuántas filas tiene que mostrar en su tabla.

En este punto, es el primer lanzamiento, y todavía tengo que preguntarle al usuario, asumo que no quiere usar iCloud, por lo que UIManagedDocument se inicializa sin el persistentStoreOptions conjunto (NSPersistentStoreUbiquitousContentNameKey y NSPersistentStoreUbiquitousContentURLKey).

A continuación, se crea el archivo en el disco con

[UIManagedDocument saveToURL: URL 
            forSaveOperation: UIDocumentSaveForCreating 
           completionHandler: ^(BOOL success){

            if(success){
              //Do something with the document
            }

           }];

luego aparece la vista. Dado que es el primer lanzamiento, debería preguntarle al usuario si quiere usar iCloud o no.

muestro un UIAlertView a partir de octubre XNUMX [viewDidAppear:animated]

Si responde"NO", todo ya está bien. Pero, ¿qué debo hacer si él dice "Si"??

¿Debo cerrar el UIManagedDocument y migrar la base de datos o es suficiente para configurar el NSPersistentStoreUbiquitousContentNameKey y NSPersistentStoreUbiquitousContentURLKey en el documento persistentStoreOptions?

2) Segundo caso: un par de días después el usuario cambia de opinión

El usuario eligió habilitar iCloud, pero después de un día cambia de opinión. Cambia a NO la opción iCloud en el paquete de configuración de la aplicación. Cuando se inicia la aplicación, busco un cambio en esta opción y encuentro que ha cambiado de SÍ a NO. Como entendí de las sugerencias que obtuve en SO, la ruta correcta debería ser mostrar un UIAlertView preguntándole si quiere:

a) Conservar los documentos en el dispositivo

b) Eliminar los documentos del dispositivo

c) Seguir usando iCloud

¿Qué debo hacer para las opciones a) yb)? ¿Una migración de base de datos para la opción a) y recrear la base de datos desde cero para la opción b)?

preguntado el 03 de diciembre de 13 a las 12:12

P1- No, no está bien simplemente abrir el archivo usando las opciones de iCloud. Tienes que usar la API de migratePersistentStore de los coordinadores de almacén persistentes. -

P2: en su caso, asegúrese de que esas opciones específicas sean relevantes, si no, cámbielas. Si el usuario no tiene visibilidad de Documentos, entonces puede estar un poco confundido. Tal vez algo como 'Mantener los datos existentes', 'Eliminar los datos existentes', 'Seguir usando iCloud' -

P2a: no solo tiene que migrar a una tienda local, sino ¿qué hacer con las cosas que ya están en iCloud? ¿Necesita eliminarlo o correr el riesgo de que se produzca un conflicto de combinación si el usuario decide más tarde volver a usar iCloud? Desordenado eh -

2 Respuestas

La forma en que usa el término "migración" es un poco confusa, ya que incrementar el modelo de datos básicos de una versión a una nueva también se denomina migración. Supongo que solo está hablando de "migrar" de iCloud a local solamente o viceversa.

En su primer caso, no crearía el UIManagedDocument hasta que el usuario haya hecho una elección. Si el usuario quiere usar iCloud, todo lo que tiene que hacer es tomarlo y abrirlo y no tiene que preocuparse por cerrar/eliminar el documento local (que ahora no tiene sentido).

En el segundo caso, si el usuario elige la opción A, copie el archivo de iCloud a local y luego elimínelo de iCloud. La opción B significa "eliminar de iCloud, ya no lo quiero". Si aún desea continuar usando Core Data localmente, cree un nuevo documento para ello. C, por supuesto, no haría nada, simplemente descartaría la alerta.

Respondido el 03 de diciembre de 13 a las 13:12

Sí, estoy usando el término "migrar" que significa de iCloud solo a local o viceversa. Desafortunadamente, no tengo la opción de crear el UIManagedDocument solo cuando el usuario ha hecho su elección, a menos que escriba algún "código sucio" para verificar si es el primer lanzamiento de la aplicación y configuré en 1 las filas en las filas de la tabla y Le engaño al celular pero no me parece una solución elegante. - nico9t

No verificaría si es el primer lanzamiento, verificaría si existe un archivo. De lo contrario, pídale al usuario que use iCloud y copie el archivo. Si ya existe, simplemente use ese archivo. Solo tendrás que comprobarlo una vez. Al crear/copiar desde iCloud, vuelve a cargar su tabla y ya está todo listo. El usuario no puede usar la tabla antes de elegir entre iCloud/local de todos modos. - Scott Berrevoets

He pensado en ello. Desafortunadamente, no hay forma de no crear el UIManagedDocument hasta que el usuario haya hecho su elección. La razón principal, y esto está claro en los documentos de Apple, es que se debe preguntar al usuario si quiere usar iCloud o no, solo si iCloud está disponible en el dispositivo. Un usuario podría iniciar la aplicación la primera vez con iCloud no habilitado, la aplicación no obtendrá el token de iCloud pero aún así debería permitir que el usuario cree sus datos. Solo cuando iCloud esté disponible, debo preguntarle si quiere usar iCloud y si responde SÍ, tendré que mover la base de datos de local solo a la nube. - nico9t

@NicolaPrada: Correcto, pero en realidad es lo mismo que "el usuario inicialmente no permitió iCloud, pero luego cambió de opinión". Tendrías que dar cuenta de eso de todos modos, así que tal vez sea más fácil hacerlo de esa manera. Sin embargo, eliminar un documento que acaba de crear no me parece correcto, por lo que probablemente no lo cree hasta que sepa que lo necesito, pero eso depende de usted. - Scott Berrevoets

Por lo general, hay dos lugares para verificar si la configuración de iCloud ha cambiado y/o para verificar o abrir cualquier archivo: 1) en el método AppDelegate aplicación: terminó de iniciarse con opciones, y 2) en el método AppDelegate aplicación pasará a primer plano

Además, si se registra para recibir notificaciones de cambio de cuenta de iCloud, puede responder a ellas.

Esto le permite organizar las cosas antes de que su vista comience a intentar mostrar elementos de datos básicos. Abrir o migrar un archivo puede llevar algún tiempo, por lo que es posible que deba mostrar alguna otra vista de indicador de actividad mientras se realiza esto.

No crearía el documento en la vista que muestra datos porque la llamada para abrir el documento se realiza de forma asíncrona y hasta que se ejecuta el controlador de finalización, no se sabe cuándo se completará. Más bien, debe usar el controlador de finalización para iniciar esta vista porque entonces sabe que es seguro comenzar a acceder a los objetos de datos principales.

Más detalles sobre cómo lograr Integración de UIManagedDocument e iCloud aquí.

Respondido el 09 de diciembre de 13 a las 09:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.