Всем привет!
Есть вьюха для аудиоплеера который реализую при помощи AVPlayer и проигрываю трэк из сети.
Для вывода длины трэка добавил в метод viewDidload observer:
player?.currentItem?.addObserver(self,
forKeyPath: #keyPath(AVPlayerItem.status),
options: [.old, .new],
context: &playerItemContext)
И реализовал его обработку следующим методом:
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
// Only handle observations for the playerItemContext
guard context == &playerItemContext else {
super.observeValue(forKeyPath: keyPath,
of: object,
change: change,
context: context)
return
}
if keyPath == #keyPath(AVPlayerItem.status) {
let status: AVPlayerItem.Status
if let statusNumber = change?[.newKey] as? NSNumber {
status = AVPlayerItem.Status(rawValue: statusNumber.intValue)!
} else {
status = .unknown
}
// Switch over status value
switch status {
case .readyToPlay:
if let duration = player?.currentItem?.duration {
let seconds = CMTimeGetSeconds(duration)
let secondsText = Int(seconds) % 60
let minutesText = String(format: "%02d", Int(seconds) / 60)
totalTimeLabel.text = "\(minutesText):\(secondsText)"
}
// Player item is ready to play.
case .failed: break
// Player item failed. See error.
case .unknown: break
// Player item is not yet ready.
}
}
}
При первой загрузке вьюхи всё окей – в моём лэйбле появляется полная длинна трэка.
Но при уходе с вьюхи плеера (эта вьюха связана навигейшен контроллером с простым tableView со списком трэков) по кнопке назад и повторным открытием вьюхи плеера время уже не отоброжается и приложение крэшится.
Причём крэш может произойти не сразу и в консоль не всегда выдаёт ошибку. Часто там просто (lldb) и всё. А иногда крэшится сразу при первом возврате в список трэков.
Но иногда я могу увидеть хоть какое-то описание ошибки в консоли:
terminating with uncaught exception of type NSException
Подскажите, пожалуйста, куда копать и в чём может быть проблема?
Без обсервера приложение работает стабильно, поэтому грешу именно на него.