with tutorial framework espaƱol djangoproject desde con cero applications core-data attributes undo-redo

core data - tutorial - Datos principales deleteObject: establece los atributos en nil



tutorial django (1)

Estoy implementando un mecanismo de deshacer / rehacer en mi aplicación. Esto funciona bien para muchos casos. Sin embargo, no puedo deshacer pasado deleteObject :. el objeto se guarda correctamente en la cola de deshacer, y lo recupero y reinsterted en la pila de Datos del núcleo, muy bien cuando llamo deshacer. El problema es que todos sus atributos se ponen a cero cuando lo elimino.

Tengo una entidad "Lienzo" con una relación a muchos llamada "gráficos" a una entidad "Gráfica", que tiene su conjunto inverso a "lienzo". Eliminar un gráfico y luego volver a insertarlo no funciona. Aquí está el código (el método de rehacer es básicamente el mismo):

- (void)deleteGraphic:(id)aGraphic { //NSLog(@"undo drawing"); //Prepare the undo/redo [self.undoManager beginUndoGrouping]; [self.undoManager setActionName:@"Delete Graphic"]; [[self.detailItem valueForKey:@"graphics"] removeObject:aGraphic]; [[self managedObjectContext] deleteObject:aGraphic]; //End undo/redo [self.undoManager registerUndoWithTarget:self selector:@selector(insertGraphic:) object:aGraphic]; [self.undoManager endUndoGrouping]; NSLog(@"graphics are %@", [self sortedGraphics]); //Update drawing [self.quartzView setNeedsDisplay]; }

y aquí está la rareza:

Antes de eliminar:

graphics are ( <NSManagedObject: 0x1cc3f0> (entity: Graphic; id: 0x1c05f0 <x-coredata:///Graphic/t840FE8AD-F2E7-4214-822F-7994FF93D4754> ; data: { canvas = 0x162b70 <x-coredata://A919979E-75AD-474D-9561-E0E8F3388718/Canvas/p20>; content = <62706c69 73743030 d4010203 04050609 0a582476 65727369 6f6e5424 746f7059 24617263 68697665 7258246f 626a6563 7473>; frameRect = nil; label = nil; order = 1; path = "(...not nil..)"; traits = "(...not nil..)"; type = Path; })

Después de rehacer:

graphics are ( <NSManagedObject: 0x1cc3f0> (entity: Graphic; id: 0x1c05f0 <x-coredata:///Graphic/t840FE8AD-F2E7-4214-822F-7994FF93D4754> ; data: { canvas = nil; content = nil; frameRect = nil; label = nil; order = 0; path = nil; traits = nil; type = nil; }),

Puedes ver que es el mismo objeto, totalmente blanqueado por Core Data. La relación eliminar los enrutamientos aparentemente no tiene nada que ver con esto, ya que los configuré como "Sin acción" en una prueba.


Bueno, no estoy contento con la solución, pero una forma es realizar un [ahorro de moc] en el contexto antes de eliminar el objeto. Lamentablemente, en situaciones de deshacer / rehacer esto significa que tengo que guardar después de cada operación, que no es óptima, pero soluciona este problema.