Делегат AVAudioPlayer не будет вызван в методе класса? - PullRequest
2 голосов
/ 01 декабря 2011

Я использую AVAudioPlayer и устанавливаю его делегат, но его делегат не вызывается

      + (void) playflip
        {
        NSString *path;
        path = [[NSBundle mainBundle] pathForResource:@"flip" ofType:@"mp3"];
        AVAudioPlayer *flip;
        flip = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:Nil];
        flip.delegate = self;
        [flip play];
}

Мой класс, в котором я реализую это класс звука

  @interface    SoundClass : NSObject <AVAudioPlayerDelegate>

Я звоню этому делегату

    - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    NSLog(@"delegate called");
    [player release];
    player = nil;
}

1 Ответ

1 голос
/ 01 декабря 2011

Похоже, что ваш flip объект выходит из области видимости, потому что остальная часть вашего кода выглядит нормально.Вот что я делаю:

// controller.h
@interface    SoundClass : NSObject <AVAudioPlayerDelegate> {}
// @property(nonatomic,retain) NSMutableDictionary *sounds;
// I have lots of sounds, pre-loaded in a dictionary so that I can reference by name
// With one player, you can just use:
@property(nonatomic,retain) AVAudioPlayer *player;

Затем выделите и загрузите звук в ваш .m

player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:Nil];
[player prepareToPlay];
player.delegate = self;
[player play];

Теперь вы должны получить ваше DidFinishPlaying уведомление.

...