LuckyLuke
LuckyLuke

Reputation: 49077

Undo core data managed object

I have this code:

Store* store = [NSEntityDescription insertNewObjectForEntityForName:@"Store"];
store.name = @"My Company"
...

Now the store is managed in the context and will be saved when the context is saved, but I have a button where the user can cancel the form where data is collected. How do I undo or remove this from the context? Or am I thinking wrong?

Upvotes: 7

Views: 8565

Answers (5)

IvanPavliuk
IvanPavliuk

Reputation: 1790

Undo works only when I create a undoManager(Swift 5):

managedObjectContext.undoManager = UndoManager()

After this configuration you can undo a last change:

managedObjectContext.undo()

Upvotes: 4

Mr. T
Mr. T

Reputation: 754

Also you could save all data from the user in an array and when the user is ready, you only have to save the array to core data.

Upvotes: 0

Jody Hagins
Jody Hagins

Reputation: 28409

As mentioned earlier, you can use an undo manager. Or, you could simply use a separate ManagedObjectContext, and do all your changes in there. If you decide to keep them, save the context. If not, simply discard it. A MOC is just a scratch pad for work, and has no impact on the underlying database until saved.

You can't really "detach an entity" but you can cause a managed object to turn back into a fault, losing any changes that have not been saved.

[managedObjectContext refreshObject:object mergeChanges:NO];

Snipped from the documentation...

If flag is NO, then object is turned into a fault and any pending changes are lost. The object remains a fault until it is accessed again, at which time its property values will be reloaded from the store or last cached state.

Upvotes: 8

Caleb
Caleb

Reputation: 125007

Core Data has built-in support for undo, so you can undo individual changes by sending the -undo message to the context:

[store.managedObjectContext undo];

It also supports -redo. You can undo all changes up to the most recent save using the -rollback method:

[store.managedObjectContext rollback]

as indicated in @melsam's answer.

Upvotes: 12

melsam
melsam

Reputation: 4977

[store.managedObjectContext rollback];

Upvotes: 6

Related Questions