我有一个播放音频的应用程序,它使用:
[[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 立即进入睡眠模式并将其从睡眠模式中唤醒。您还可以按两次将来电直接发送到语音信箱,这是一项只需触摸即可完成的有用功能。