2017-03-09 150 views
1

当我点按音量按钮时,我的应用程序崩溃。在我的视图控制器中,我打电话setActiveAVAudioSession.sharedInstance(),当用户点击一个按钮时,我播放一首歌曲AVAudioPlayer。在这个视图控制器中,无论何时按下音量按钮,播放器播放与否,应用程序都会以EXC_BAD_ACCESS的速度崩溃。我在调试器中看到一条错误消息,偶尔会抱怨关键值观测值为outputVolume按音量按钮按下按下AVAudioPlayer

任何想法为什么我的应用程序崩溃?

CLUE:有两种方法可以导致视图控制器导致崩溃。一种方式导致崩溃,另一种导致崩溃。无论哪种方式,我以同样的方式将视图控制器推到导航控制器上。

+1

上传代码与'outputVolume' –

+0

我不是每一个接触'outputVolume'财产直接。当我按下其中一个设备音量按钮时,会发生以下情况: ***由于未捕获的异常'NSInternalInconsistencyException',原因:'{( UIButton:0x1b8bf970.minY {id:743} )}:-observeValueForKeyPath :ofObject:change:context:消息已收到但未处理。 关键路径:outputVolume 观察对象: 更改:{ kind = 1; new =“0.375”; } 上下文:0x0' – grez

回答

1

你有没有增加类似的东西? :

let audioSession = AVAudioSession.sharedInstance() 
    audioSession.addObserver(self, forKeyPath: "outputVolume", 
          options: NSKeyValueObservingOptions.new, context: nil) 

如果你没有,那么你需要重写这个方法,做任何你需要它:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
    if keyPath == "outputVolume"{ 

    } 
} 
+0

对于AVAudioSession,我只调用'setCategory'和'setActive',我没有添加任何观察者或做任何事情,除了将其存储在我的视图控制器的变量中。 – grez

+0

有两种方法可以让您访问视图控制器吗? –

+0

从2个不同的视图控制器我把有问题的vc推到当前的导航控制器 – grez