Swift 应用程序因更改卷而崩溃,状态KVO消息已收到,但未针对keypath进行处理;“输出量”;

Swift 应用程序因更改卷而崩溃,状态KVO消息已收到,但未针对keypath进行处理;“输出量”;,swift,debugging,key-value-observing,avaudiosession,Swift,Debugging,Key Value Observing,Avaudiosession,每当我更改音量时,我的应用程序就会崩溃。它告诉我我没有处理来自AVAudioSession的通知,但我已经为此设置了观察器,并设置了一个断点以确保它确实被处理 var kvoVolumeObs: NSKeyValueObservation? func observe() { kvoVolumeObs = audioSession.observe(\.outputVolume, options: [.new, .old], changeHandler: { (sessio

每当我更改音量时,我的应用程序就会崩溃。它告诉我我没有处理来自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
2020-09-28 08:00:11.082153-0600 98.5 KYGO[1507:259676]***由于未捕获的异常“NSInternalinconsistenceException”而终止应用程序,原因:“{signaled=No,valid=Yes,order=0,context={target=0x10bcf8f80}”:对象的-observeValueForKeyPath:更改:context:消息已收到但未处理。
关键路径:outputVolume
观察对象:
更改:{
种类=1;
新=1;
}
上下文:0x0'
***第一次抛出调用堆栈:
(0x193951114 0x1a7177cb4 0x194bc8f84 0x194bc90a4 0x194bcb4d8 0x194bc88d0 0x19adc869c 0x19adc1404 0x102b97db8 0x102b995fc 0x102ba7a6c 0x1938d0c30 0x1938cb0e8 0x1938ca200 0x1a99c5598 0x196190004 0x1961955d8 0x100fe9248 0x1935a9598)
libc++abi.dylib:以NSException类型的未捕获异常终止
***由于未捕获异常“NSInternalInconsistencyException”而终止应用程序,原因:“{signaled=No,valid=Yes,order=0,context={target=0x10bcf8f80}}:An-observeValueForKeyPath:of object:change:context:消息已收到但未处理。
关键路径:outputVolume
观察对象:
更改:{
种类=1;
新=1;
}
上下文:0x0'
以NSException类型的未捕获异常终止

我以为这个函数只适用于旧版本的KVO实现?你可能是对的。我的评论基于错误消息中提到的方法。