objective-c - 核心数据 : Clear changes from NSManagedObjectContext

标签 objective-c ios core-data

我正在应用程序委托(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/

相关文章:

objective-c - Xcode 构建错误 clang 失败

ios - 如何完全卸载 SpriteKit Scene

android - 适用于 Android 和 iOS 的快速应用程序原型(prototype)制作工具

ios - 新项目中的CoreData

ios - Core Data 中多对多关系的 sectionNameKeyPath 值

ios - 在 iOS9 上崩溃 -[NSPersistentStoreCoordinator _coordinator_you_never_successfully_opened_the_database_device_locked :]

ios - 通知触发时播放视频

objective-c - 为什么变量不保留在 Asset-Library block 之外?

iphone - Objective-C 单例只响应类方法

iphone - 阻止回调崩溃