Назначение селектора дает сбой на iPod touch 2-го поколения - PullRequest
1 голос
/ 23 октября 2010

Обновление: проблема волшебным образом исчезла, см. Комментарий

У меня есть функция, которая отлично работает на 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, я вижу это:

alt text

Когда я наводю курсор мыши на _finishSelector, я вижу это: alt text

Когда я пытаюсь «Распечатать описание», консоль возвращает:

Печатное описание 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).

Может кто-нибудь сказать мне, что происходит, как это исправить и / или как узнать, что происходит?

...