CoreData:从NSManagedObjectContext清除更改

Tej*_*udi 11 core-data objective-c ios

我正在NSManagedObjectContextApplication委托级实例化一个对象并在我UIViewController的所有s上共享它.这是我用于在我的一个View Controllers中访问它的代码:

        NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
        modelObj = (Model *) [NSEntityDescription insertNewObjectForEntityForName:@"Model" inManagedObjectContext:[appDelegate managedObjectContext]];
Run Code Online (Sandbox Code Playgroud)

现在在这个屏幕上,我有一个UITableView9行,每个单元格有一个UITextField.当用户将值输入到文本字段中时,我将它们分配到modelObj.现在,我的用户可以选择取消并放弃所有更改或将其保存到磁盘.我有保存代码正常工作.但是在用户试图放弃更改的情况下,我不知道该怎么做.似乎没有[managedObjectContext discardChanges]办法将它们扔掉.

我可以想出几种方法来解决这个问题.

  • NSManagedObjectContext为每个控制器创建一个新实例,而不是在整个应用程序中共享一个实例.
  • 或者,我可以NSString在我的代码中创建一堆s并在其中保存用户值,并insertNewObjectForEntityForName:仅在用户单击save时调用.

哪种方式合适?或者有没有办法NSManagedObjectConext放弃对它做出的所有改变?

谢谢,
Teja.

Tim*_*ean 39

NSManagedObjectContext有一个简单的方法:

[managedObjectContext rollback];
Run Code Online (Sandbox Code Playgroud)

此方法"从撤消堆栈中删除所有内容,放弃所有插入和删除,并将更新的对象恢复为其上次提交的值." (文件)

除非我遗漏了某些东西,否则它应该能为您提供所需的一切.

  • 由于问题是用iOS标记的,因此提及回滚方法要求将"undoManager"分配给MOC可能是有用的,在iOS的情况下我认为它不是默认的,因此`rollback`将不执行任何操作. (2认同)