Estoy instanciando un objeto NSManagedObjectContext
en el nivel de delegado de Aplicación y lo estoy compartiendo en todos mis UIViewController
s. Aquí está el código que utilizo para acceder a ella en una de mis controladores Ver:CoreData: Borrar cambios de NSManagedObjectContext
NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
modelObj = (Model *) [NSEntityDescription insertNewObjectForEntityForName:@"Model" inManagedObjectContext:[appDelegate managedObjectContext]];
Ahora en esta pantalla, tengo una cada célula UITableView
con 9 filas & tiene una UITextField
. A medida que el usuario ingresa valores en los campos de texto, los asigno a modelObj
. Ahora, mi usuario tiene una opción para cancelar y descartar todos los cambios o guardarlos en el disco. Tengo el código de guardar funcionando bien. Pero en el caso de que un usuario intente descartar los cambios, no estoy seguro de qué hacer. No parece haber un método [managedObjectContext discardChanges]
para descartarlos.
Puedo pensar en un par de maneras de resolver esto.
- crear una nueva instancia de
NSManagedObjectContext
para cada controlador en lugar de compartir uno al otro lado de la aplicación. - O bien, podría crear un grupo de
NSString
s en mi código y guardar los valores de usuario en ellos y llamar alinsertNewObjectForEntityForName:
solo si el usuario hace clic en guardar.
¿Cuál es la correcta? ¿O hay una manera de hacer que NSManagedObjectConext
descarte todos los cambios que se le hicieron?
Gracias,
Teja.
La respuesta de Tim Dean es correcta. Pero tampoco sería un enfoque equivocado crear un contexto secundario para esta pantalla de edición, insertar allí su nuevo objeto y solo guardarlo en el contexto principal si el usuario lo confirma. De lo contrario, simplemente tira al niño y terminarás. –