ios核心数据回滚

use*_*760 1 core-data nsmanagedobjectcontext ios

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

Cha*_* A. 8

您不能仅回滚部分更改集NSManagedObjectContext.做你正在谈论的最好的方法是创建NSManagedObjectContext一个父类上下文的新元素.保存时,更改会被推送到父级(您必须确保将父上下文保存为实际保留到磁盘).此外,如果您以这种方式隔离更改集,您甚至不必调用rollback子上下文,您可以将它们丢弃.

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

该主题的文档相当薄.我在WWDC视频之外可以找到的唯一参考是在这个iOS 5发行说明文档中.