NSDocument 하위 클래스에 대한 정리 코드는 어디에 있습니까?
-
19-08-2019 - |
문제
문서 기반 응용 프로그램이 있으며 하위 클래스가 있습니다 NSDocument
필요한 방법을 제공했지만 내 문서에는 광범위한 정리가 필요합니다 (외부 작업을 실행해야 함). 이것을 넣을 수있는 가장 좋은 곳은 어디입니까? 다음과 같은 몇 가지 다른 방법을 시도했습니다.
close
close:
canCloseDocumentWithDelegate:shouldCloseSelector:contextInfo
dealloc
내가 넣으면 dealloc
, 때로는 호출되고 다른 경우에는 (Command+Q를 누르면 내 문서의 거래를 우회하는 것 같습니다),이 코드는 실패없이 호출되어야합니다 (프로그램이 예기치 않게 종료되지 않는 한).
해결책
각 문서를 로컬 알림 센터에서 관찰자로 추가하도록하십시오. NSApplicationWillTerminateNotification
. 알림 방법에서 청소 방법을 호출하십시오 (또한 dealloc
또는 close
).
다른 팁
여기서 정답은 내 사용 사례에 맞지 않았지만 질문은 그다지. 따라서 추가 답변.
내 유스 케이스 : 문서를 닫습니다 (문서가 열려있는 몇 가지 중 하나 일 수 있지만 응용 프로그램을 닫지 않을 수 있습니다.
이 경우 (글을 쓰는 시점에 그리고 내가 잘못된 장소를보고 있지 않는 한) 선적 서류 비치 가능한 한 도움이되지 않습니다.
나는 추가했다 canCloseDocumentWithDelegate:shouldCloseSelector:contextInfo:
내 nsdocument 서브 클래스를 재정의하고 그 안에서 Super를 호출하십시오. 문서는 Super를 호출 해야하는지 여부는 말하지 않지만 약간의 로깅은 시스템이 선택기와 컨텍스트를 제공하고 있음을 보여줍니다. 이 방법은 문서가 닫히기 직전에 호출됩니다.
- (void) canCloseDocumentWithDelegate:(id)delegate shouldCloseSelector:(SEL)shouldCloseSelector contextInfo:(void *)contextInfo;
{
if ([self pdfController])
{
[[[self pdfController] window] close];
[self setPdfController: nil];
}
[super canCloseDocumentWithDelegate:delegate shouldCloseSelector: shouldCloseSelector contextInfo: contextInfo];
}
이 방법에 대한 유용한 논의가 있습니다 코코비더. 이 접근 방식에 대한 단점이 있거나 더 나은 방법이 있으면 의견을 제시하십시오.