CoreData:清除NSManagedObjectContext中的更改

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

  NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext; modelObj = (Model *) [NSEntityDescription insertNewObjectForEntityForName:@"Model" inManagedObjectContext:[appDelegate managedObjectContext]]; 

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

我可以想到几种方法来解决这个问题。

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

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

谢谢,
Teja公司。

NSManagedObjectContext有一个简单的方法:

 [managedObjectContext rollback]; 

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

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

您可能正在寻找-refreshObject:mergeChanges: – 文档说它从持久性存储中重置一个对象,如果您将NO作为第二个参数传递,则可以选择不重新应用已经进行的更改。

这可能需要您存储一组已更改的对象(对于第一个参数),然后在将上下文中的更改提交到存储时清除该组。 不过,这应该是一个非常微不足道的补充。