私はオーディオを再生するアプリを持っています。
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
バックグラウンドでオーディオを再生します。
デバイスのウェイク/スリープ ボタン1を押すと、画面がロックされ、ディスプレイがオフになります。音声を約 8 分間再生したままにして、スリープ/スリープ解除ボタンまたはホーム ボタンのいずれかを押すと、アプリがクラッシュします。
これはいくつかの理由で非常に奇妙です:
- アプリは「再開」されておらず、ディスプレイがオンになっており、ロック画面が表示されているだけです。
- App のデリゲート メソッドは呼び出されません:
-applicationWillEnterForeground:
、-applicationDidBecomeActive:
- アプリはロック画面にアートワークを表示しません
MPNowPlayingInfoCenter
NSZombies を有効にすると、次のようになります。
*** -[__NSArrayM removeObject:]: message sent to deallocated instance 0x10bf9060
バックトレースは次のようになります (あまり役に立ちません!)。
コンソール出力
これは、クラッシュ時のコンソール出力です。
Aug 29 11:37:30 unknown SpringBoard[51] <Notice>: Posting 'com.apple.iokit.hid.displayStatus' notifyState=1
Aug 29 11:37:30 unknown UserEventAgent[12] <Warning>: DEBUG: Changing screen blanked state: 0
Aug 29 11:37:30 unknown SpringBoard[51] <Notice>: MultitouchHID: detection mode: 255->0 (deferring until bootloaded)
Aug 29 11:37:30 unknown SpringBoard[51] <Notice>: MultitouchHID: device bootloaded
Aug 29 11:37:30 unknown SpringBoard[51] <Notice>: MultitouchHID: detection mode: 0->0
Aug 29 11:37:30 unknown myapp[19495] <Error>: *** -[__NSArrayM removeObject:]: message sent to deallocated instance 0x12158bc0
Aug 29 11:37:38 unknown SpringBoard[51] <Notice>: Posting 'com.apple.iokit.hid.displayStatus' notifyState=0
Aug 29 11:37:38 unknown SpringBoard[51] <Notice>: MultitouchHID: detection mode: 0->255
Aug 29 11:37:38 unknown UserEventAgent[12] <Warning>: DEBUG: Changing screen blanked state: 1
Aug 29 11:37:49 unknown kernel[0] <Debug>: AppleSerialMultiplexer: mux-ad(eng)::dormancySetIntervalGated: Setting dormancy interval to 0 ms with mask 0
問題を追跡する方法に関する提案はありますか? ロック画面が表示されているときにアプリに送信されるシステムレベルの呼び出しがあるようですが、どのように-removeObject
呼び出しをトリガーしているのか、このオブジェクトを誰が所有しているのかさえわかりません。
1. iPhone の上部の右側には、ウェイク/スリープ ボタンがあります。薄型で邪魔にならないボタンです。発動するにはかなりのプレッシャーがかかる。目立たないことと相まって、偶発的な起動の可能性が低くなります。また、優れた触覚フィードバックも提供します。ウェイク/スリープ ボタンには、iPhone を即座にスリープ モードにすることと、スリープ モードから復帰させることの 2 つの主な目的があります。また、2回押すと、かかってきた電話を直接留守番電話に転送できるなど、タッチするだけでできる便利な機能です。