2009-11-13 2 views
2

주 창에 엔티티 목록을 표시하는 간단한 핵심 데이터 앱이 있습니다. 새 엔티티를 만들거나 추가하려면 별도의 관리 객체 컨텍스트가있는 두 번째 모달 창을 사용하여 주 관리 객체 컨텍스트와의 간섭없이 변경 사항을 실행 취소/다시 실행할 수 있습니다.NSUndoManager 및 runModalForWindow :

runModalForWindow:을 사용하여 편집 창이 시작됩니다. 이 모달 창에서 일련의 개별 변경을 수행하면 단일 실행 취소를 수행하면 모든 변경 사항이 취소됩니다. 을 포함하도록 NSUndoManager (두 번째 관리되는 개체 컨텍스트에서 얻음)의 실행 루프 모드를 설정해 보았지만 아무런 차이가없는 것처럼 보였습니다.

runModalForWindow:을 사용하여 창을 시작하지 않고 단순히 makeKeyAndOrderFront:을 사용하면 모든 것이 예상대로 작동합니다.

이전에이 문제를 겪은 사람이 있습니까? 당신은 당신의 응용 프로그램에 대한 코코아 응용 프로그램 키트를 사용하여 우연히

케빈

+0

두 문맥을 원하는 이유가 명확하지 않습니다. 두 개의 실행 취소 스택을 원하십니까? "한 번 실행 취소 ..."라고 쓰면 원래의 또는 모달 윈도우의 컨텍스트가 실행 취소됩니까? – paulmelnikow

답변

0

있습니까?

경우 :

다음 인용문은 Mac Dev Center, NSUndoManager Class Reference에서입니다 .. 그것은 단지 오버레이 ..와, 메인 창에서 그렇게 할 것이다 그러나 이것은 올바른 방향에있을 수 있습니다 이유는 확실하지 NSUndoManager를 실행 취소하면 은 작업을 되돌려 저장하므로 실행 취소를 다시 실행할 수 있습니다. 코코아 응용 프로그램 키트 기반 응용 프로그램에서 사용하는 경우, NSUndoManager 그룹 실행 루프의 단일 사이클 내의 모든 작업 취소를 수행하는주기 동안 발생한 모든 변경 사항을 되돌립니다 너무.

+0

응답 해 주셔서 감사합니다. 두 번째 모달 창에서 여러 작업을 독립적으로 수행합니다. 따라서 각 이벤트는 실행 루프의 다른 주기로 처리됩니다. 원래 게시물에서 언급했듯이 makeKeyAndOrderFront :를 사용하면 잘 작동합니다. – damacster

관련 문제