2012-12-16 7 views
3

저는 NSUndoManager를 사용하는 편집 뷰 컨트롤러가 있습니다.이 뷰 컨트롤러는 내 지속성 저장소 (핵심 데이터 프로젝트) 용으로 설정된 것입니다.백그라운드에서 NSUndoManager가 변경 사항을 실행 취소합니까?

내 앱의 기능 중 하나는 외부 서버와의 동기화입니다. 제가 알고 싶은 것은, 내 생각에 뭔가를 편집하고 동시에 앱이 서버와 동기화되면, 마음을 바꾸고 현재 편집에서 변경 사항을 실행 취소하기로 결정하면 앱을 실행 취소 할지도 모릅니다. 실행 취소 그룹이 시작되었을 때 동기화가 수행 된 경우 동기화 중에 수행 된 모든 변경 사항 또는 변경 사항 만 실행 취소 했습니까?

+0

+1 당신이 답을 찾으셨습니까을 취소입니까? – surlac

+0

아니 슬프게도 : (여전히 호기심이 많은 손상을 할 가능성이 있기 때문에 – PaReeOhNos

답변

3

구현에 따라 다릅니다. 일반적으로 실행 취소 관리자는 이벤트에 대한 실행 취소 그룹을 열고 변경 사항을 캡슐화합니다 (groupsByEvent 참조). 백그라운드 동기화를 위해 보조 관리 객체 컨텍스트를 사용하고 컨텍스트를 다시 주 컨텍스트에 병합하는 경우 실행 취소 등록을 비활성화했는지 확인해야합니다 (disableUndoRegistration 참조).

편집 : 여기에 당신이 작성하지 않고 별도의 맥락에서 동기화 할 수있는 작은 코드 조각 작업을

// create a child context with no undo manager 
NSManagedObjectContext *context = [NSManagedObjectContext contextWithParent:self.managedObjectContext]; 
context.undoManager = nil; 

[... do your synchronization with the child context...] 

// merge into main context without generating undo actions 
[undoManager disableUndoRegistration]; 
[context save:&error]; 
[managedObjectContext processPendingChanges]; 
[undoManager enableUndoRegistration]; 

// to prevent undo action beyond the synchronization to remove all undo actions 
[undoManager removeAllActions]; 
+0

아뇨, 내 실행 취소 호출이 동기화 항목에 대한 별도의 실행 취소 그룹에있는 한 별도로 나타납니다. – PaReeOhNos

+0

예 두 가지 질문이 있지만 동기화와 함께 제공되는 변경 사항을 취소 할 수 있어야합니까? 그렇지 않은 경우 실행 취소 작업으로 동기화 변경을 부분적으로 취소 할 수 있습니다 –

+0

실행 취소 관리자가 동기화를 취소 할 수 없어야합니다. 실행 취소 작업은 동기화에서 어떤 것도 변경할 수 없어야합니다. 사용자가 실제로 동기화되는 레코드를 편집하고 나서 실행 취소하면 다시 원래 상태로 되돌아 가야합니다. 동기화에 의해 방금 업데이트되었습니다. – PaReeOhNos

관련 문제