Обновление: проблема волшебным образом исчезла, см. Комментарий
У меня есть функция, которая отлично работает на iPhone 3G, iPhone 3Gs и симуляторе, но вылетает на iPod touch 2-го поколения.
- (id) initWithDelegate:(id) delegate
data:(NSData *) data
finishSelector:(SEL)finishSelector{
if(self = [super init]){
_delegate = delegate;
_finishSelector = finishSelector; // crashes
Когда он достигает последней строки, он падает с «EXC_BAD_ACCESS». Когда я ставлю точку останова на этой строке и нахожу курсор над Finish, я вижу это:
Когда я наводю курсор мыши на _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).
Может кто-нибудь сказать мне, что происходит, как это исправить и / или как узнать, что происходит?