2015-01-14 2 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

"상태가 변경된 상태에 머물러있다"는 것이 무슨 뜻인지 잘 모르겠습니다. 첫 번째'temporaryContext.save (nil)'호출과'temporaryContext.rollback()'사이에 어떤 변경을 했습니까? 그렇다면,'rollback'을 호출 한 후에 이러한 변경 사항들이 관리 객체에 남아 있습니까? –

+0

변경 사항이 없습니다. 부모 컨텍스트가 롤백되지 않습니다. –

답변

2

rollback으로 전화를 걸면 해당 컨텍스트에서 저장하지 않은 변경 내용 만 되돌립니다. 코드의 첫 번째 블록에서 이미 변경 사항을 저장 했으므로 rollback은 아무 것도하지 않습니다.

첫 번째 코드 블록에서 save을 호출하면 모든 변경 사항이이 경우 주 컨텍스트 인 상위 컨텍스트로 커밋되었습니다. 주 컨텍스트에서 save을 아직 호출하지 않았으므로 주 컨텍스트에서 rollback을 호출하여 변경 사항을 제거 할 수 있습니다.

관련 문제