2015-01-05 7 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?), но, к сожалению, я не могу адаптировать его с помощью Swift.

ответ

1

Вам необходимо прочитать документ о NSRunLoop, когда отображается ваше меню, ни один из ваших потоков не получит контроль. Вам нужно сообщить OS, в которой вы хотите участвовать.

+0

Спасибо! Добавление 'NSRunLoop.currentRunLoop(). AddTimer (yourTimer, forMode: NSRunLoopCommonModes)' решил мою проблему. – ixany

 Смежные вопросы

  • Нет связанных вопросов^_^