ios核心数据回滚

标签 ios core-data nsmanagedobjectcontext

我使用托管对象上下文的回滚方法来丢弃所做的更改,但遇到了一个问题:
如果我有不同的 View Controller ,并且它们每个都可以对不同的数据库数据进行更改,并且如果第一个 Controller 执行回滚方法,我不希望它回滚第二个 Controller 所做的更改。无论如何只回滚特定实体,但不是全部?
还是我应该使用多个托管对象上下文?

最佳答案

您不能只回滚 NSManagedObjectContext 的部分更改集.做你所说的最好的方法是制作一个新的NSManagedObjectContext那是父上下文的子项。保存时,更改会推送到父级(您必须确保保存父级上下文以实际持久保存到磁盘)。此外,如果您以这种方式隔离变更集,您甚至不必调用 rollback在子上下文中,您可以将它们扔掉。

请注意,要使用 NSManagedObjectContext 的父/子关系你必须 initWithConcurrencyType:初始化所有上下文的方法,并且您必须指定 NSPrivateQueueConcurrencyTypeNSMainQueueConcurrencyType .需要注意的是,这会影响您访问上下文的方式。如果您不在使用并发类型为 NSMainQueueConcurrencyType 的上下文的主队列上,您必须将所有与上下文交互的方法调用放在一个 block 中并将其传递给上下文 performBlock:performBlockAndWait:方法。

关于这个主题的文档相当薄。我可以在 WWDC 视频之外找到的唯一引用是 this iOS 5 release notes document .

关于ios核心数据回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18174100/

相关文章:

swift - NSPredicate 一对多关系查询示例

ios - 从核心数据中获取最新值并将其分配给标签。 swift

ios - 将旧数据模型转换为全新的数据模型(从头开始并删除其他所有内容)

ios - 当我从 NSManagedObjectContext 获取数据时出错

ios - 使用 RestKit+CoreData 时,如何只获取从服务器发送和映射回的对象行?

ios - 在 Swift 中制作 Gif 动画

objective-c - 我应该在哪个方法中设置 UITextField 的委托(delegate)?

objective-c - 注册应用程序的 SoundCloud API 和 401 错误

iOS 共享扩展 URLForResource 访问主应用程序中的文件

iphone - 为什么我需要在核心数据项目中使用原始访问器方法?