core-data - immagine - jquery ajax json esempio



Dati principali deleteObject: imposta gli attributi su zero (1)

Sto implementando un meccanismo di annullamento / ripristino nella mia app. Questo funziona bene per molti casi. Tuttavia, non posso annullare passato deleteObject :. l'oggetto è correttamente salvato nella coda di annullamento, e lo riavuto e reinserito nello stack dei Core Data bene quando si chiama annulla. Il problema è che tutti i suoi attributi vengono azzerati quando lo elimini.

Ho un'entità "Canvas" con una relazione to-many chiamata "graphics" ad un'entità "Graphic", che ha il suo inverso impostato su "canvas". Cancellare una grafica, quindi inserirla di nuovo, non funziona. Ecco il codice (il metodo di ripetizione è praticamente lo stesso):

- (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];
}

ed ecco la stranezza:

Prima di eliminare:

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;
})

Dopo ripeti:

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;
}),

Puoi vedere che è lo stesso oggetto, completamente sbiancato da Core Data. A quanto pare, i rouls di eliminazione delle relazioni non hanno nulla a che fare con esso in quanto li ho impostati su "Nessuna azione" in un test.

https://src-bin.com


Answer #1

Bene, non sono contento della correzione, ma un modo è quello di eseguire un [salvataggio del moc] sul contesto prima di eliminare l'oggetto. Sfortunatamente in situazioni di annullamento / ripetizione ciò significa che devo salvare dopo ogni operazione, che è subottimale ma corregge questo problema.





undo-redo