첫 번째 NSDocument 기반 응용 프로그램을 만들고 있습니다. 새로운 파일을 처음부터 새로 만들거나 레거시 파일을 가져 와서 만들 수 있습니다.NSDocument 하위 클래스 인스턴스가 응답 체인에 없습니다.
이 응용 프로그램은 문서 당 여러 개의 창을 허용하므로 makeWindowControllers를 무시합니다. 이 방법은 현재 매우 간단하다 :
- (void) makeWindowControllers
{
if (documentDatabase == nil) return;
DataSheetWindowController * dswc = [[DataSheetWindowController alloc] initWithDatabase:documentDatabase];
[self addWindowController: dswc];
}
창은 예상대로, 그러나, 저장, 저장으로 되돌리기 및 문서가 리스폰 더 체인에없는 것처럼 다른 문서 활성화 메뉴가 비활성화되어 나타납니다. 실험으로
, 내 NSWindowController 클래스에이 방법을 추가하는 시도 :- (void)saveDocument:(id)sender {
[[self document] saveDocument:sender];
}
장소에이 방법, 저장 메뉴 항목이 활성화되고이를 선택하면 문서의 저장 메서드가 호출되게된다.
설명서 및 Stack Overflow에 관한 다른 질문을 읽으면서 뭔가 잘못되었다는 것이 확실합니다.이 메서드를 NSWindowController 클래스에 넣으면 안됩니다. 나는 어리석은 것을 간과 한 것이 틀림 없다. 그러나 나 자신의 삶에 대해 그것이 무엇인지, 또는이 문제에 대한 다른 언급이나 웹상의 다른 곳을 언급 할 수 없다.
유용한 추가 정보 - IB에서 창 소유자 및 대리인은 NSWindowController로 설정됩니다. 응답자 체인 (How to inspect the responder chain? 참조)을 표시하는 방법을 만들었지 만 문서가 나열되지 않았습니다. 다음은 응답 체인의 결과입니다 (NSDocument는 NSResponder의 하위 클래스가 아니기 때문에 어쨌든 나열되어 있어야하는지 확실하지 않습니다). 나는 NSWindowController 클래스에 넣어 saveDocument 방법은 윈도우 컨트롤러가이 문서에 연결되어 있는지 알 수 있습니까 나에게 나타냅니다, 작업을 수행하기 때문에
RESPONDER CHAIN:
<NSClipView: 0x102344350>
<NSScrollView: 0x102344480>
<NSView: 0x102345040>
<NSWindow: 0x10234e090>
.
그래서 응답 체인에 문서가없는 것처럼 문서가 작동하는 이유는 무엇입니까?
업데이트 된 정보 : 내가 isDocumentEdited가 true를 돌려주는 것을 확인했다
[self updateChangeCount:NSChangeDone];
: 새 문서를 설정 한 후 initWithType 방법은 문서 상태가 편집되어 있는지 확인하기 위해이 임시 라인을 포함한다. 내가 솔루션이 하나가 제안거야
문서 클래스에서'validateMenuItem :'을 대체하면, 호출됩니까? 저장을 위해 부름 받았습니까? 저장을 위해 호출되면 '슈퍼'는 무엇을 반환합니까? –
좋은 질문입니다. 난 그냥이 시도하고, NSDocument 내 하위 클래스에 배치 된 경우 validateMenuItem 전혀 호출되지 않습니다. –
'validateMenuItem' 또는'validateMenuItem :'? 'validateMenuItem'을 호출하는 것은 아무것도 없지만 유효성을 검사 할 메뉴 항목과 함께'validateMenuItem :'이 호출됩니다. (정확히 구현하고 싶습니다.) –