5

저는 코코아 응용 프로그램을 작성 중이며 창 제어기 사용에 관한 질문이 있습니다. 사용자가 메뉴 막대에서 새로 만들기를 선택하면 NSWindowController의 하위 클래스 인 MyWindowController의 인스턴스가 만들어지고 MyWindow.xib의 새 창이 표시됩니다.창이 닫히면 NSWindowController를 해제하십시오.

응용 프로그램 대리인의 작업을 처리하고 있습니다. 다음과 같은 것을 검색 한 후에 내가 본 것에서 끝낼 수 있습니다. 일단 창을 표시하면 더 이상 창 컨트롤러에 대한 포인터를 저장할 이유가 없으므로 창을 표시하기 전에이를 자동으로 할당합니다.

[[[[MyWindowController alloc] init] autorelease] showWindow:self]; 

이후에 곧 창을 놓으므로 창은 잠깐 동안 화면에 표시되고 사라집니다. 나는 창유리를 -showWindow : 메서드에서 유지하고 windowWillClose 알림을 받으면 스스로 풀어주는 솔루션을 발견했다.

- (IBAction)showWindow:(id)sender 
{ 
    [self retain]; 
    [[NSNotificationCenter defaultCenter] addObserverForName:NSWindowWillCloseNotification 
                 object:self.window 
                 queue:nil 
                usingBlock:^(NSNotification *note) { 
                 [self release]; 
                }]; 
    [super showWindow:sender]; 
} 

더 좋은 방법이 있나요? Apple 설명서를 검색 한 후 사용할 사례를 찾지 못했습니다. 아주 기본적인 것 같아서 커버해야합니다. 아마도 잘못된 용어로 검색하고있을 것입니다.

답변

5

일반적으로 윈도우 컨트롤러를 누르고 있으면 작업을 마칠 때만 놓습니다. 귀하의 애플 리케이션 대리인이 책임을 질 것이라고 말하고 싶습니다. 여러 개가있을 수 있으면 배열에 저장하십시오. 솔루션이 효과를 발휘할 수 있지만 그다지 우아하지는 않습니다.

문서 기반 Cocoa 응용 프로그램에서 작업하는 경우 문서 하위 클래스 메서드 인 makeWindowControllers에서 창 컨트롤러를 만들고 해당 클래스가 창 컨트롤러에 대한 포인터를 보유하도록합니다.

관련 문제