2014-01-29 4 views
1

NSDndocManager와 함께 NSDocument를 사용하고 있습니다. 나는를 UndoManager에 취소 작업을 밀어 때 NSDocument updateChangeCount 설정이 지연의 발견 : 문서가이 호출되기 전에 수정되지 않은 경우NSDocument isDocumentEdited를 NSUndoManager로 상태를 푸시 한 직후에 YES로 설정하는 방법

[undoManager registerUndoWithTarget:self selector:@selector(applyUndoState:) object:state]; 
NSLog(@"Document.isEdited: %d", [self isDocumentEdited]); 

이 "0"이 표시됩니다가. 이 메소드가 종료 된 후 undomanager가 updateChangeCount를 나중에 호출하는 것으로 보입니다. 언변관이 문서 updateChangeCount를 강제 업데이트 할 수 있습니까? 내가 수동으로

if (![self isDocumentEdited]) 
    [self updateChangeCount:NSChangeDone]; 

부를 수 있지만이를 UndoManager과의 상호 작용에서 안전 할 것인지 모르겠어요.

+1

왜 지금 바로 문서의 편집 상태가 필요합니까? – Volker

+0

사용자가 탐색기 트리 뷰를 클릭 할 때 모덜리스 편집기에서 변경 내용을 커밋하기를 원하기 때문입니다. runloop이 다음 이벤트로 진행하기 전에이 호출 직후에 문서를 저장해야합니다. 내가 언급 한 주위에 작업을 추가하고, 그것은 잘 작동하는 것 같습니다. –

답변

2

NSUndoManager 그룹은 현재 이벤트가 끝날 때까지 자동으로 실행 취소 이벤트를 실행합니다. 현재 이벤트가 끝날 때까지 현재 그룹을 닫고 처리합니다.

isDocumentEdited이 즉시 변경되기를 원하는 이유가 확실하지 않아서 어떻게 해결할 수 있을지 모르겠습니다.

+0

작업이 정상적으로 작동하는 것 같습니다. 실행 취소/다시 실행이나 문서 저장 상태에서 문제가 발생하지 않습니다. –