我正在应用程序委托(delegate)级别实例化一个 NSManagedObjectContext
对象,并在我的所有 UIViewController
中共享它。这是我用来在我的一个 View Controller 中访问它的代码:
NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
modelObj = (Model *) [NSEntityDescription insertNewObjectForEntityForName:@"Model" inManagedObjectContext:[appDelegate managedObjectContext]];
现在在这个屏幕上,我有一个包含 9 行的 UITableView
,每个单元格都有一个 UITextField
。当用户在文本字段中输入值时,我将它们分配给 modelObj
。现在,我的用户可以选择取消并放弃所有更改或将它们保存到磁盘。我的保存代码工作正常。但是在用户试图放弃更改的情况下,我不确定该怎么做。似乎没有 [managedObjectContext discardChanges]
方法可以将它们全部丢弃。
我可以想出几种方法来解决这个问题。
- 为每个 Controller 创建一个新的
NSManagedObjectContext
实例,而不是在整个应用程序中共享一个。 - 或者,我可以在我的代码中创建一堆
NSString
并将用户值保存在其中,并仅在用户点击保存时调用insertNewObjectForEntityForName:
。
哪种方式是正确的?或者有没有办法让 NSManagedObjectConext
放弃对它所做的所有更改?
谢谢,
泰迦。
最佳答案
NSManagedObjectContext 对此有一个简单的方法:
[managedObjectContext rollback];
此方法“从撤消堆栈中删除所有内容,丢弃所有插入和删除,并将更新的对象恢复为它们最后提交的值。” ( documentation )
除非我遗漏了什么,否则它应该能为您提供所需的一切。
关于objective-c - 核心数据 : Clear changes from NSManagedObjectContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8424830/