我正在应用程序代理级别实例化NSManagedObjectContext
对象,并在我的所有UIViewController
中共享它。这是我用于在我的一个View Controllers中访问它的代码:
NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
modelObj = (Model *) [NSEntityDescription insertNewObjectForEntityForName:@"Model" inManagedObjectContext:[appDelegate managedObjectContext]];
现在在这个屏幕上,我有一个UITableView
,有9行&每个单元格都有一个UITextField
。当用户将值输入到文本字段中时,我将它们分配到modelObj
。现在,我的用户可以选择取消并放弃所有更改或将其保存到磁盘。我有保存代码正常工作。但是在用户试图放弃更改的情况下,我不知道该怎么做。似乎没有[managedObjectContext discardChanges]
方法将它们全部丢弃。
我可以想出几种方法来解决这个问题。
NSManagedObjectContext
的新实例,而不是在整个应用程序中共享一个实例。 NSString
并在其中保存用户值,并仅在用户点击保存时调用insertNewObjectForEntityForName:
。哪种方式合适?或者有没有办法让NSManagedObjectConext
丢弃对它做出的所有更改?
谢谢,
的Teja。
答案 0 :(得分:39)
NSManagedObjectContext有一个简单的方法:
[managedObjectContext rollback];
此方法“从撤消堆栈中删除所有内容,放弃所有插入和删除,并将更新的对象恢复为其上次提交的值。” (documentation)
除非我遗漏了某些东西,否则它应该能为您提供所需的一切。
答案 1 :(得分:2)
您可能正在寻找-refreshObject:mergeChanges:
- 文档说它会从持久性存储中重置一个对象,如果您将NO
作为第二个参数传递,则可以选择不重新应用具有已经完成了。
这可能需要您存储一组已更改的对象(对于第一个参数),然后在将上下文中的更改提交到商店时清除该组。不过,这应该是一个非常微不足道的补充。
答案 2 :(得分:0)
managedObjectContext.rollback()