由于NotificationCenter中的观察者,Swift应用程序崩溃

时间:2019-07-17 02:12:35

标签: ios swift crash nstimer nsnotificationcenter

在我的应用程序中,我使用计时器,该计时器在屏幕上显示该应用程序已打开的时间。如果用户转到后台并稍后返回,则计时器应继续运行。为此,我在viewDidLoad()中添加了一个观察者:

NotificationCenter.default.addObserver(self, selector: #selector(restartTimer), name: UIApplication.willEnterForegroundNotification, object: nil)

restartTimer()通过记住UserDefaults的开始时间来处理此问题:

@objc func restartTimer() {
    if let timerDate = UserDefaults.standard.object(forKey: "lastTimerDate") as? Double {
        trackTimer?.invalidate()
        trackTimerStartDate = timerDate
        trackTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)
    } else {
        startTimer()
    }
}

问题是,我从设备收到崩溃日志,这些日志清楚地表明问题出在restartTimer()函数上。它还提到了__CF_NOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER____CFXRegistrationPost_block_invokeGSEventRunModal

可能需要提及的是,此UIViewController是全局声明的(var trackTimer = TrackTimer()),因此以后可以引用它。因此,它会在我的应用程序启动后立即初始化,而且我认为从未调用过deinit()。

我应该手动删除那些观察者以删除错误吗?我还有其他办法吗?我已经在Internet上进行搜索,但是找不到合适的解决方案。

0 个答案:

没有答案