2015-01-05 1 views
0

NSMenuItem 내의 카운터를 업데이트하는 간단한 타이머를 만들었습니다.Swift : NSMenuItem이 활성 상태 (보이는 상태) 일 때 어떻게 업데이트 할 수 있습니까?

func timerUpdate(){ 
    dispatch_async(dispatch_get_main_queue()){ 

     // calculating time 
     let timeLeft = self.lxTimeLeft() // returns a double of remaining seconds 
     let hoursLeft = Int(timeLeft/3600) 
     let minLeft = Int(timeLeft/60) - (hoursLeft*60) 
     let secLeft = Int(timeLeft) - (hoursLeft*3600) - (minLeft*60) 

     let hoursLeftStr = String(format:"%02d", hoursLeft) 
     let minLeftStr = String(format:"%02d", minLeft) 
     let secLeftStr = String(format:"%02d", secLeft) 

     println("timeLeft \(hoursLeftStr):\(minLeftStr):\(secLeftStr)") 
     self.menuActiveFor.title = "\(self.activatedFor) \(hoursLeftStr):\(minLeftStr):\(secLeftStr)h" 

     self.statusMenu.update() // not working 
    } 
} 

기본적으로 작동하지만 NSMenu를 열면 NSMenuItem (UI)이 새로 고쳐지지 않습니다. Objective-C (How to update NSMenu while it's open?)에 대한 해결책을 찾았지만 슬프게도 스위프트를 사용하여이를 적용 할 수 없습니다.

답변

1

메뉴가 표시 될 때 약 NSRunLoop에 대한 문서를 읽어야합니다. 어떤 스레드도 제어권을 얻지 못할 때입니다. 참여하고자하는 OS에 알려야합니까?

+0

고마워요! NSRunLoop.currentRunLoop(). addTimer (yourTimer, forMode : NSRunLoopCommonModes)를 추가하면 내 문제가 해결되었습니다. – ixany

관련 문제