我创建了一个这样的临时文本:
let temporaryContext = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
temporaryContext.parentContext = Utility.managedObjectContext()
temporaryContext.performBlockAndWait({
// .. here I have done some changes on temporaryContext
let success = temporaryContext.save(nil)
//GUI get updated, GUI use MAIN context
})
我想回滚更改,所以我这样做:
temporaryContext.performBlockAndWait({
temporaryContext.rollback()
let success = temporaryContext.save(nil)
//GUI not get restored to the default variable
})
但它没有效果,父上下文不会回滚,为什么?
答案 0 :(得分:2)
当您致电rollback
时,它只会还原该上下文中未保存的更改。在第一个代码块中,您已经保存了这些更改,因此rollback
将不会执行任何操作。
当您在第一个代码块中调用save
时,所有更改都提交到父上下文,我认为这是本例中的主要上下文。因为您还没有在主上下文中调用save
,所以您仍然可以在主上下文中调用rollback
来删除主上下文中的这些更改。