2017-03-09 149 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