#swift #debugging #key-value-observing #avaudiosession
#swift #отладка #наблюдение за значением ключа #avaudiosession
Вопрос:
Мое приложение вылетает при каждом изменении громкости. Это говорит мне, что я не обрабатываю уведомление от AVAudioSession, но я настроил для этого наблюдателя и установил точку останова, чтобы убедиться, что оно действительно обрабатывается.
var kvoVolumeObs: NSKeyValueObservation?
func observe() {
kvoVolumeObs = audioSession.observe(.outputVolume, options: [.new, .old], changeHandler: { (session, change) in
print("volume for session (session.outputVolume)")
if let player = self.player {
player.setVolume(session.outputVolume)
}
})
}
Может быть, я не обрабатываю его в правильном месте?
Я устанавливаю AVAudioSession как активный в моем классе AVPlayer, но я бы не ожидал, что это инициирует вызов KVO.
func startAudioSession() {
backgroundSessionKillTimer?.invalidate()
DispatchQueue.global().async {
do {
try AVAudioSession.sharedInstance().setActive(true, options: AVAudioSession.SetActiveOptions.notifyOthersOnDeactivation)
} catch let error as NSError {
print("Failed to set AudioSession Stuff (error.localizedDescription)")
}
}
}
Я некоторое время работал над этим без решения. Любая помощь приветствуется.
Инструкция отладки для сбоя приведена ниже.
2020-09-28 08:00:11.082153-0600 98.5 KYGO[1507:259676] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '<CFRunLoopSource 0x1044d1840 [0x1e13d5b40]>{signalled = No, valid = Yes, order = 0, context = <SCNetworkReachability RLS> {target = 0x10bcf8f80}}: An -observeValueForKeyPath:ofObject:change:context: message was received but not handled.
Key path: outputVolume
Observed object: <AVAudioSession: 0x10444d5a0>
Change: {
kind = 1;
new = 1;
}
Context: 0x0'
*** First throw call stack:
(0x193951114 0x1a7177cb4 0x194bc8f84 0x194bc90a4 0x194bcb4d8 0x194bc88d0 0x19adc869c 0x19adc1404 0x102b97db8 0x102b995fc 0x102ba7a6c 0x1938d0c30 0x1938cb0e8 0x1938ca200 0x1a99c5598 0x196190004 0x1961955d8 0x100fe9248 0x1935a9598)
libc abi.dylib: terminating with uncaught exception of type NSException
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '<CFRunLoopSource 0x1044d1840 [0x1e13d5b40]>{signalled = No, valid = Yes, order = 0, context = <SCNetworkReachability RLS> {target = 0x10bcf8f80}}: An -observeValueForKeyPath:ofObject:change:context: message was received but not handled.
Key path: outputVolume
Observed object: <AVAudioSession: 0x10444d5a0>
Change: {
kind = 1;
new = 1;
}
Context: 0x0'
terminating with uncaught exception of type NSException
Комментарии:
1. Я думал, что эта функция предназначена только для старой версии реализации KVO?
2. Возможно, вы правы. Я основывал свой комментарий на методе, упомянутом в сообщении об ошибке.