gpt4 book ai didi

swift - 应用程序退出后留在事件监视器中

转载 作者:行者123 更新时间:2023-11-28 05:37:36 25 4
gpt4 key购买 nike

我正在使用此类在后台创建一个带有 NSTimer 实例的 macOS 应用程序:

class RepeatingTimer {
private var timer: Timer?

init(timeInterval: TimeInterval, eventHandler: @escaping ((Timer) -> Void)) {
timer = Timer.scheduledTimer(withTimeInterval: timeInterval, repeats: true, block: eventHandler)
}

deinit {
cancel()
}

func cancel() {
timer?.invalidate()
}
}

除了当我终止我的应用程序(CMD+Q)或只是定期退出我的应用程序时,我的应用程序在事件监视器中仍然有一个进程,尽管我在 AppDelegate 中终止了 NSTimer:

    func applicationWillTerminate(_ aNotification: Notification) {
MainVC.repeatingTimer?.cancel()
}

我在我的应用程序的主要 viewDidLoad() 方法中设置我的计时器,如下所示:

MainVC.repeatingTimer = RepeatingTimer(timeInterval: TimeInterval(1), eventHandler: onTimerUpdate(timer:))

我还尝试用 NSWindowDelegate 委托(delegate)我的主 ViewController,并使用它来尝试摆脱这个过程,但这也没有用:

    override func viewDidAppear() {
self.view.window?.delegate = self
}

func windowWillClose(_ notification: Notification) {
MainVC.repeatingTimer?.cancel()
}

最佳答案

这修复了它:

    func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
return true
}

还要确保 Core Date 已禁用,或者 Core Data 正在正确保存内容(如果没有,它不会“实际”退出应用程序)

关于swift - 应用程序退出后留在事件监视器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58107497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com