3

내 하위 뷰에서 액세스해야하는 NSNotificationCenter 및 NSUndoManager와 같은 일부 클래스가 내 문서에 있습니다.하위 뷰에서 문서에 액세스하는 더 좋은 방법이 있습니까?

NSUndoManager *undoManager = [[[[[self view] window] windowController] document] undoManager]; 

내가 모르는 더 나은 방법이 있나요 :

지금은 이런 일을 수행하여 액세스 할 수 있습니다? 감사.

답변

3

왜보기에서 실행 취소 관리자에 대해 걱정해야합니까? 일부 리팩토링이 순서대로있을 것 같습니다.

일반적으로 뷰는 첫 번째 응답자에서 일부 동작을 트리거 할 수 있습니다. 그런 다음 해당 동작에 응답하는 객체 (예 : 창 제어기 또는 문서)를 찾을 때까지 해당 동작이 응답 체인에 전달됩니다. '실행 취소'이벤트는 일반적으로 데이터 모델에 영향을 미치므로 문서는 이와 같은 것을 처리합니다. 사용자가 이전 작업을 취소하면 모델이 이전 상태로 돌아가고 뷰 계층 구조가 변경 사항을 반영합니다.

실행 취소 관리자를 다루는 책임을 문서로 옮길 수 있습니까?

알림 센터에서도 마찬가지입니다. 문서에 알림 센터가있는 경우 왜보기에서 알림 센터를 사용하려고합니까? 위에서 설명한대로 응답 체인을 활용하여 문서에 메시지를 가져올 수 있습니까? 더 적절한 경우 +defaultNotificationCenter으로받을 수있는 기본 알림 센터가 있습니다.

+0

동의 : 문서 클래스 및 다른 모델 클래스는 대부분의 경우 실행 취소 관리자에게 실행 취소/다시 실행 작업에 대해 알려야하는 클래스 여야합니다. –

+0

내 문서의 하위보기가 관련있는 알림 만 수신하도록하고 싶습니다. 하위 뷰가 defaultNotificationCenter를 사용하면 다른 문서에서 알림을 받게됩니다. 내가 생각한 것은 응용 프로그램 위임과 동일한 것이지만 문서에 대한 것입니다. 당신은 리펙터가 순서에 있을지도 모른다 맞습니다. – panupan

+1

Views는 일반적으로 하위 뷰를 찾고 드로잉하는 경우와 그 종류의 것이 관련된 경우를 제외하고는 다른 뷰에 대해별로 신경 쓰지 않습니다. 응답 체인을 통해 메시지를 보내고 잊어 버리십시오. 완료해야하는 알림이 있으면 문서 또는 창 컨트롤러에 알림을 게시하십시오. 뷰가 다른 뷰의 내용이나 동작에 의존 할 때 갑자기 뷰를 이동하는 것은 매우 어려워집니다. – Caleb

관련 문제