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
作为第二个参数传递,则可以选择不重新应用已经进行的更改。
这可能需要您存储一组已更改的对象(对于第一个参数),然后在将上下文中的更改提交到存储时清除该组。 不过,这应该是一个非常微不足道的补充。