开发者

Can't use two "audioPlayerDidFinishPlaying"

Can you please tell me how to fix this? I want to release two different AVAudioPlayer when they finish playing, but separately.

Here's my code:

.h File

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

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

.m File

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];
}

Can't use two "audioPlayerDidFinishPlaying"

(Open the image in a new tab to see it better ^^,)


Nay, that's illegal on the grounds of the language.

You have to distinguish the different players according to the AVAudioPlayer * pointer submitted with the message.

If you just want to release it, just write

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

and you're done and illegal too, since you don't own aPlayer.

But a better solution would be to detect which audio player you own and release it.

- (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.
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜