2013-12-11 4 views
0

NSStatusItem에는 NSMenu가 첨부되어 있으며 NSMenu의 버튼 중 하나는 NSWindow를 엽니 다. 이 단추 중 하나를 클릭 할 때마다 창이 예상대로 열리고 제대로 작동하지만 NSStatusItem의 또 다른 표시가 열립니다.NSStatusItem이 여러 번 표시되는 이유는 무엇입니까?

NSStatusItem은 시계이므로 제대로 업데이트되고 있음을 알 수 있습니다. 그러나 복제 된 NSStatusItem에는 자체 메뉴가 없습니다. 창을 더 많이 만드는 버튼을 누르면 더 많은 NSStatusItem 복제 버전이 나타납니다.

이 경우를 제외하고는 모두 정상적으로 작동합니다.

정보가 많지 않지만 잠재적으로 도움이 될만한 생각은 없습니다. 더 많은 정보를 제공하거나 무언가를 시도해 보면 행복 할 것입니다.

EDIT : 버튼을 클릭 할 때마다 awakeFromNib이 어떻게 든 호출됩니다. 따라서 절반 작동하는 NSStatusItem이 발생합니다.

수정 : 임시 해결 방법은 awakeFromNib 메서드를 dispatch_once에 넣는 것입니다.

편집 : 버튼을 클릭하면 NSStatusItem가 PreferencesWindow 펜촉에 포함되어 @zpasternack

- (IBAction)preferences:(id)sender { 
    self.windowController = [[NSWindowController alloc] initWithWindowNibName:@"PreferencesWindow"]; 
    [[self windowController] showWindow:self]; 
} 
+0

버튼을 클릭하면 NSWindow가 열리는 코드를 게시 할 수 있습니까? – zpasternack

+0

거기에 @zpasternack이 있습니다. 또한, 'windowController'는 헤더에 다음과 같이 선언됩니다. @property (strong) NSWindowController * windowController; –

답변

0

에 의해 제안, 트리거 추가 방법은? 단추를 클릭 할 때마다 펜촉을로드하기 때문에 설명 할 수 있습니다.

또한 버튼을 클릭 할 때마다 해당 창을 다시 만들어야하는 이유가 있습니까? 아마 처음으로 할 수 있을까요?

- (IBAction)preferences:(id)sender { 
    if(self.windowController == nil) { 
     self.windowController = [[NSWindowController alloc] initWithWindowNibName:@"PreferencesWindow"]; 
    } 
    [[self windowController] showWindow:self]; 
} 
+0

NSStatusItem은 PreferencesWindow에 없습니다. 환경 설정에 의해 열리는 PreferencesWindow가 있고 NSStatusItem이있는 MainMenu.xib이 있습니다. 'awakeFromNib'가 실제로 작동하는 방법에 대해 읽어 볼 것입니다. 왜냐하면 MainMenu뿐만 아니라 객체가 소유하고있는 펜촉이 열리면 호출 할 수 있기 때문입니다. –

+0

"당신과 당신의 사이에 일대일 대응을 유지하는 것이 좋습니다 File 's Owner 객체와 관련 nib 파일 같은 File 's Owner 객체로 두 개의 nib 파일을로드하면 해당 객체의 awakeFromNib 메소드가 두 번 호출되어 일부 데이터 구조가 원하지 않는 방식으로 다시 초기화 될 수 있습니다. " https://developer.apple.com/library/mac/documentation/cocoa/reference/applicationkit/Protocols/NSNibAwaking_Protocol/Reference/Reference.html –

+0

추가 xib를 별도의 컨트롤러로 분리해야합니다. –

관련 문제