更新:问题神奇地消失了,请参阅评论
我的功能在iPhone 3G,iPhone 3Gs和模拟器上运行良好,但在第二代iPod touch上崩溃。
- (id) initWithDelegate:(id) delegate
data:(NSData *) data
finishSelector:(SEL)finishSelector{
if(self = [super init]){
_delegate = delegate;
_finishSelector = finishSelector; // crashes
当它到达最后一行时,它会以“EXC_BAD_ACCESS”崩溃。当我在该行上放置一个断点并将鼠标悬停在finishSelector上时,我看到了这一点:
当我将鼠标悬停在_finishSelector上时,我看到了这一点:
当我尝试“打印描述”时,控制台返回:
finishSelector的打印说明:
正在调试的程序在从GDB调用的函数中发出信号 GDB已将上下文恢复到呼叫前的状态。
该函数的调用如下:
_teachersWordPlayer = [[SimplifiedPlayer alloc] initWithDelegate:self
data:_audioFileService.responce
finishSelector:@selector(teachersAudioPlayerDidPlay:)];
头文件的一部分如下所示:
@interface SimplifiedPlayer : NSObject <AVAudioPlayerDelegate> {
AVAudioPlayer *_soundPlayer;
id _delegate;
SEL _finishSelector;
}
- (id) initWithDelegate:(id) delegate
data:(NSData *) data
finishSelector:(SEL)finishSelector;
我也尝试启用NSZombie,但它没有提供有关崩溃的更多细节(我不指望它,因为我从未发布_finishedSelector afaik)。
有谁能告诉我发生了什么,如何解决这个问题和/或如何找出发生了什么?