문제

문서 기반 응용 프로그램이 있으며 하위 클래스가 있습니다 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];    
}

이 방법에 대한 유용한 논의가 있습니다 코코비더. 이 접근 방식에 대한 단점이 있거나 더 나은 방법이 있으면 의견을 제시하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top