2011-03-05 22 views
6

¿Cuál es la estrategia adecuada para restaurar al almacén persistente existente si hay un error al hacer un - [NSManagedObjectContext save:]?cómo manejar el error al guardar managedObjectContext?

- [NSGoverseObjectContext rollback]?

O debería guardar una copia de la tienda en el sistema de archivos antes de intentar guardarla y, si hay un error, usar - [NSPersistentStoreCoordinator setURL: forPersistentStore:] para configurar la tienda en la tienda guardada?

Gracias por cualquier apuntador.

Gonzalo

Respuesta

10

Cuando falla la operación de guardado, usted (como programador) hizo algo mal.

Escribí algunas aplicaciones de Core-Data bastante complejas y nunca vi un error en la producción.

Asegúrese de que los valores que los usuarios pueden ingresar se pueden guardar sin error.

Esto significa que si tiene una relación no opcional no acepte el botón "Hecho" hasta que el usuario haya seleccionado una entidad para esta relación. O establecer una entidad de relación predeterminada.
Si necesita un NSString en un formato especial, valide esa cadena antes de aceptarla.

Es más conveniente para el usuario también. Si le dice 10 minutes ago you did something wrong, thats why I will delete all your changes pensará WTF?. Si le dice The value you try to enter is not in the correct format. Please use xxxxx pensará Ok, let's change it.

Y ahora, después de que se aseguró de que un sin salvación falla se puede poner [context rollback] en ella, porque nunca se debe decir nunca.
Pero antes de hacer esto, debe preguntar al usuario si desea enviarle el registro de errores. Porque un ahorro nunca debería fallar.

0

creo, aunque yo no lo veo escrito explícitamente en los documentos, que si se produce un error al guardar luego falla el proceso de almacenamiento y el almacén de datos se mantendrá sin cambios. Puede verificar esto fácilmente copiando el almacén de datos, forzando algún tipo de error, y luego comparando la tienda con la copia.

0

NSManagedContext save devuelve un BOOL, SÍ si es correcto, NO si no. Eso le dirá con seguridad si el almacén de datos realmente ha sido cambiado.

Otra cosa: Eche un vistazo a la "Guía de programación de datos básicos de Apple: características persistentes de la tienda", en "Configuración del comportamiento de guardado de una tienda SQLite". Ofrecen un ejemplo completo de cómo configurar las opciones de sincronización completas para la tienda, para garantizar que no se dañen los datos debido a alguna interrupción durante el proceso de guardado.

Cuestiones relacionadas