2012-11-30 3 views
1

응용 프로그램에서 작업하고 있습니다. NSWindows가 열려 있지 않을 때 NSWindows에 액세스하기 위해이 응용 프로그램에는 여러 NSWindows와 하나의 StatusItem이 있습니다. 이 창 중 일부는 계속해서 새로운 번호와 상태로 인터페이스를 업데이트합니다. 문제는 시스템 상태 표시 줄에서 StatusItem을 클릭 할 때마다 Windows에서 업데이트를 차단하고 StatusMenu를 닫을 때까지 업데이트를 볼 수 없다는 것입니다.NSStatusItem은 NSWindows에서 사용자 인터페이스 업데이트를 차단합니다.

답변

3

Run Loop Modes입니다.

주 스레드에서 실행되는 지연된 작업은 일반적으로 메뉴 또는 모달 대화 상자가 열려있을 때 실행되지 않도록하는 주 실행 루프의 NSDefaultRunLoopMode에 대해 예약됩니다. 대신 NSRunLoopCommonModes을 사용해야하며 기본 및 이벤트 추적 (메뉴, 대화 상자) 모드에서 모두 실행할 수 있습니다. 예를 들어

:

  • 당신이 대신 scheduledTimerWithTimeInterval의, 업데이트 이벤트를 발생 [[NSRunLoop currentRunLoop] addTimer:theTimer forMode:NSRunLoopCommonModes]와 함께 timerWithTimeInterval를 사용하는 NSTimer를 사용하는 경우.

  • performSelectorOnMainThread:withObject:waitUntilDone:을 사용하는 경우 performSelectorOnMainThread:withObject:waitUntilDone:modes:을 사용하고 modes: 인수에 [NSArray arrayWithObject:NSRunLoopCommonModes]을 전달하십시오.

+0

답장을 보내 주셔서 감사합니다. 내 응용 프로그램 코드의 대부분이 작성 되었기 때문에이 과정을 거치지 않고 NSRunLoopCommonModes를 선택자에 적용하거나 StatusMenu 런 루프 모드를 변경하지 않고도 NSRunLoopCommonModes를 적용 할 수 있습니까? –

+0

@AbcdEfg 저는 두려워합니다. 다른 모드에서 상태 메뉴를 실행할 수있는 방법이 없기 때문에 타이머와 선택기를 예약하는 방법을 변경해야합니다. – hamstergene