2013-05-22 8 views
0

비교적 긴 작업이 있습니다. 그래서 나는 별도의 창 (NSWindowController)을 AppDelegate에서 가져 와서 진행 상황을 보여줍니다. 그것은 같습니다.창 닫기 및 NSWindowController 해제

//AppDelegate.m 
if (self.progresswindow == nil) { 
    self.progresswindow = [[ProgressController alloc] initWithWindowNibName:@"ProgressController"]; 
} 

[progresswindow showWindow:self]; 
//[[progresswindow window] setReleasedWhenClosed:NO]; 
[NSApp runModalForWindow:progresswindow.window]; 

작업이 완료되면 진행 창이 닫힙니다.

//ProgressController.m 
[NSApp stopModal]; 
[self close]; 

잘 작동합니다. 그러나 버튼을 클릭하여 동일한 창으로 작업의 다른 세션을 시작하면 애플리케이션이 열리지 만 작업이 실행되지 않습니다. 마지막 인스턴스가 공개되지 않은 것처럼 보입니다. 진행 창에는 다음과 같은 행이 있습니다.

- (void)windowDidLoad { 
    NSLog(@"Hey!"); 
} 

NSLog는 두 번째로 호출되지 않습니다. 내가 뭘 잘못하고 있는지 궁금해? setReleasedWhenClosed를 호출하면 AppDelegate에서이 적용되지 않습니다. 그래도 체크 박스를 사용 중지 한 경우 릴리스가 있습니다. 나는 내가 그것을 닫을 때 풀어 놓을 수 있도록 different topic의 진행 창을 NSWindowWillCloseNotification 관찰 할 필요가있는 것을 읽었다. 하지만 ARC을 사용하고 있습니다. 그래서 수동으로 출시 할 수는 없습니까? 한편, Apple의 샘플 (TableViewPlayground)을 열면이 알림이 사용 된 것으로 보입니다. 또한 this topicthis topic을 읽었습니다. 그러나 나는 그 문제가 무엇인지 모른다.

나는 모든 조언을 주셔서 감사합니다. 시간 내 주셔서 감사합니다.

답변

1

진행 창 컨트롤러를 해제하십시오.

+0

뭐라 구요? –

+0

self.progressWindow (제어기)는 창 제어기를 보유합니다. 창 제어기는 창을 보유합니다. (기존의 이유 때문에 조금 더 복잡해졌지만 지금은 조금 복잡합니다.) 다음에 작업을 입력하면 기존 윈도우 컨트롤러를 다시 사용하게되며 기존 윈도우가 사용됩니다. 이 동작을 원하지 않으면 위임자의 속성을 nil로 설정하여 다음에 창 컨트롤러 (및 창)의 새 인스턴스가있게됩니다. –

+0

조언 해 주셔서 감사합니다. progresswindow = nil처럼; ? 이 선은 실수로 문제를 해결했습니다. –