我想创建一个仅每隔30秒检查和API的MenuBar应用程序,并根据标志的状态更改StatusBarIcon。我一直在关注本教程:https://nsrover.wordpress.com/2014/10/10/creating-a-os-x-menubar-only-app/但我第一次只能在applicationDidFinishLaunching
函数中执行此操作。
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
statusBarItem = NSStatusBar.system().statusItem(withLength: NSSquareStatusItemLength)
statusBarItem?.image = #imageLiteral(resourceName: "locked")
self.fetchOccupied { (occupied) in
if (occupied) {
self.statusBarItem?.image = #imageLiteral(resourceName: "locked")
} else {
self.statusBarItem?.image = #imageLiteral(resourceName: "unlocked")
}
}
}
之后,就像我说的那样,我想每30秒再次检查一次,而不必点击StatusBarItem,但是我不能将循环放在该函数中,因为那时应用程序永远不会启动。
我不知道在哪里放置循环因为我没有主ViewController或任何东西。我只有AppDelegate类和XIB文件。
在哪里可以创建循环开启的功能?也许我可以将该循环异步放在applicationDidFinishLaunching
函数中?
谢谢。
答案 0 :(得分:0)
var timer: DispatchSourceTimer?
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
self.timer = DispatchSource.makeTimerSource(flags: DispatchSource.TimerFlags(), queue: DispatchQueue.global(qos: DispatchQoS.QoSClass.userInitiated))
self.timer?.scheduleRepeating(deadline: DispatchTime.now(), interval: DispatchTimeInterval.seconds(30), leeway: DispatchTimeInterval.seconds(0))
self.timer?.setEventHandler(handler: {
//loop body here
print("timer fire", separator: "", terminator: "\n")
})
self.timer?.resume()
}
答案 1 :(得分:0)
您可以只运行一个时钟,每隔30秒收到一次通知。
power(0, 0) == 1