我有一个奇怪的行为,我的应用程序在切换回前一个视图控制器后崩溃。我有一个显示配置文件控制器,然后我去编辑配置文件控制器。我在那里录制了一个音频文件,然后在1秒后回到我以前的视图控制器,应用程序崩溃,没有错误只是一个
Thread1:EXC_BREAKPOINT(代码= 1,子代码= 0x1026eb43c)
我使用DispatchSourceTimer
录制音频,以便在录制时在视图上添加计数器,并以这种方式初始化全局变量:
var nonObservalePropertyUpdateTimes:DispatchSourceTimer = DispatchSource.makeTimerSource(flags: [], queue: DispatchQueue.main)
以下是我使用名为AudioManager
的Singltone类进行录制的方法:
@IBAction func micButtonTapped(_ sender: UIButton) {
if recButtonIsChecked {
if AudioManager.shared.record(fileName: "recbio") {
sender.setBackgroundImage(UIImage(), for: .normal)
sender.setImage(#imageLiteral(resourceName: "pauseProfileButton"), for: .normal)
playRecordButton.setBackgroundImage(#imageLiteral(resourceName: "editProfilePlay"), for: .normal)
recordVoiceLabel.isHidden = true
recButtonIsChecked = false
secondsLabel.isHidden = false
nonObservalePropertyUpdateTimes.resume()
}
nonObservalePropertyUpdateTimes.setEventHandler {[weak self] in
self?.secondsLabel.text = String(describing: AudioManager.shared.countDownTimer)
}
nonObservalePropertyUpdateTimes.schedule(deadline: DispatchTime.now(), repeating: DispatchTimeInterval.milliseconds(100))
} else {
sender.setBackgroundImage(#imageLiteral(resourceName: "editProfileMicButton"), for: .normal)
sender.setImage(UIImage(), for: .normal)
recButtonIsChecked = true
stopRecording()
}
}
我认为DispatchQueue中发生了一些导致此崩溃的错误,因为当我从编辑配置文件视图控制器中删除nonObservalePropertyUpdateTimes
对象时,当我转到我的应用程序时,应用程序没有崩溃配置文件视图控制器。
所以我试着这样做,但没有帮助:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
nonObservalePropertyUpdateTimes.suspend()
nonObservalePropertyUpdateTimes.cancel()
}
或者可能有deinit
这个Dispatch对象的方法。我真的不知道出了什么问题,做了什么。我甚至没有正确的错误信息。
答案 0 :(得分:2)
感谢每一位试图帮助Rob的人。我只是以这种方式对DispatchSourceTimer进行了初始化,它起作用了,没有再崩溃了。
deinit {
nonObservalePropertyUpdateTimes.resume()
}
答案 1 :(得分:0)
确保UI活动在主线程内运行:
DispatchQueue.main.async {
self?.secondsLabel.text = String(describing: AudioManager.shared.countDownTimer)
}
答案 2 :(得分:0)
暂停后无法取消计时器。必须先恢复然后再取消计时器。
https://medium.com/@danielgalasko/a-background-repeating-timer-in-swift-412cecfd2ef9