2015-01-14 1 views
0

создать temporaryContext вроде этого:Как отменить изменения во временном контексте?

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

Я не уверен, что вы подразумеваете под словом "state stick в измененное состояние". Вы вносили какие-либо изменения между первым вызовом 'timeContext.save (nil)' и 'temporContext.rollback()'? Если да, сохраняются ли эти изменения в управляемых объектах после вызова 'rollback'? –

+0

Я не делал никаких изменений, что я имею в виду, что родительский контекст не будет откатываться назад –

ответ

2

Когда вы вызываете rollback, он только возвращает несохраненные изменения в этом контексте. В первом блоке кода вы уже сохранили эти изменения, и поэтому rollback ничего не сделает.

Когда вы вызвали save в первом блоке кода, все изменения были перенесены в родительский контекст, который, я полагаю, является основным контекстом в этом случае. Поскольку вы еще не вызвали save в главном контексте, вы все равно можете позвонить rollback в главном контексте, чтобы удалить эти изменения в основном контексте.