EXC_BAD_ACCESSが出て困った話

TriShootのクリア結果をTweetする機能を実装しようと思って、
その調査をしていたら不具合を見つけちゃいました、テヘッ!

毎晩のように、申請してはRejectして、Uploadしては申請して、
そのせいで新しいバージョンのレビューが始まらないのかな・・・。

という訳で、新しい不具合はですね、
結果画面でホームボタンを押すとかして、
アプリをバックグラウンドに遷移させると落ちます。。。

で、最初はEXC_BAD_ACCESSって表示されて、
解放されたリソースにアクセスとかしたっけなー・・・って思って、
いろいろ調べた結果、BGMが悪さしてたようでした。

もう少し詳しく言うと、
applicationWillResignActiveの中で、
SKViewを継承したクラスにポーズを要求したまでは良かったのですが、
その後、BGMが鳴ったままだと例外が発生するので、
AVAudioPlayerstopメソッドを呼ぶことで解決しました。

ただ、SKSceneを継承したクラスでAVAudioPlayerを参照していれば、
この問題は起きないようなので、ちょっとよく分かってないです。
なんでAVAudioPlayerを参照していたかというと、
BGMと同期をとるためだったのですが・・・、うーん。

ちなみに、停止したBGMの再生は、
applicationDidBecomeActiveで要求することにしました。

この時点でよく分かんないのは、
AVAudioPlayerplayingプロパティが変化するタイミングだったり、
stopメソッドとpauseメソッドの違いです。

さっきの解決策も、
playingプロパティを無視して、stopメソッドを呼ぶ必要があったりと、
もしかして、アプリ起動時のAVAudioSessionの初期化とか、
その際のsetCategoryメソッドの引数とか、
その辺が関係してるんですかね。

次回は、この辺りも考慮して設計したいところです。

おしまい。

Leave a Comment