EXC_BAD_ACCESSが出て困った話
TriShootのクリア結果をTweetする機能を実装しようと思って、
その調査をしていたら不具合を見つけちゃいました、テヘッ!
毎晩のように、申請してはRejectして、Uploadしては申請して、
そのせいで新しいバージョンのレビューが始まらないのかな・・・。
という訳で、新しい不具合はですね、
結果画面でホームボタンを押すとかして、
アプリをバックグラウンドに遷移させると落ちます。。。
で、最初はEXC_BAD_ACCESSって表示されて、
解放されたリソースにアクセスとかしたっけなー・・・って思って、
いろいろ調べた結果、BGMが悪さしてたようでした。
もう少し詳しく言うと、
applicationWillResignActive
の中で、
SKView
を継承したクラスにポーズを要求したまでは良かったのですが、
その後、BGMが鳴ったままだと例外が発生するので、
AVAudioPlayer
のstop
メソッドを呼ぶことで解決しました。
ただ、SKScene
を継承したクラスでAVAudioPlayer
を参照していれば、
この問題は起きないようなので、ちょっとよく分かってないです。
なんでAVAudioPlayer
を参照していたかというと、
BGMと同期をとるためだったのですが・・・、うーん。
ちなみに、停止したBGMの再生は、
applicationDidBecomeActive
で要求することにしました。
この時点でよく分かんないのは、
AVAudioPlayer
のplaying
プロパティが変化するタイミングだったり、
stop
メソッドとpause
メソッドの違いです。
さっきの解決策も、
playing
プロパティを無視して、stop
メソッドを呼ぶ必要があったりと、
もしかして、アプリ起動時のAVAudioSession
の初期化とか、
その際のsetCategory
メソッドの引数とか、
その辺が関係してるんですかね。
次回は、この辺りも考慮して設計したいところです。
おしまい。
Leave a Comment