Не могу использовать два "audioPlayerDidFinishPlaying" - PullRequest
0 голосов
/ 05 августа 2011

Подскажите пожалуйста, как это исправить? Я хочу выпустить два разных AVAudioPlayer, когда они закончат играть, но по отдельности.

Вот мой код:

.h Файл

@interface ViewController : UIViewController <AVAudioPlayerDelegate>
{
     NSString          *path;
}

- (IBAction)Short:(id)sender;
- (IBAction)BeatLong:(id)sender;

.m Файл

AVAudioPlayer   *media;
AVAudioPlayer   *media2;

- (IBAction)Short:(id)sender
{
    path = [[NSBundle mainBundle] pathForResource:@"Short" ofType:@"wav"];
    media = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
    [media setDelegate:self];
    [media play];
}

- (IBAction)Beat:(id)sender
{
    path = [[NSBundle mainBundle] pathForResource:@"Beat" ofType:@"mp3"];
    media2 = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
    [media2 setDelegate:self];
    [media2 play];
}

.m

(откройте изображение на новой вкладке, чтобы лучше его увидеть ^^,)

1 Ответ

2 голосов
/ 05 августа 2011

Нет, это незаконно на основании языка.

Вы должны различать разных игроков по указателю AVAudioPlayer * отправлено с сообщением.

Если вы просто хотите выпустить его, просто напишите

- (void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)aPlayer successfully:(BOOL)flag
{ 
    [aPlayer release]; 
}

и вы закончили и незаконно, так как у вас нет aPlayer.

Но лучшим решением было бы определить, какой аудиоплеер у вас есть, и выпустить его.

- (void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)aPlayer successfully:(BOOL)flag
{ 
    if ( aPlayer == self.media )
        [self.media release];
    else if ( aPlayer == self.media2 ) 
        [self.media2 release];
    // other players cannot be released, since we don't know anything about their owner.
}
...