【发布时间】:2014-03-16 14:40:12
【问题描述】:
关于使用 AVAudio Player 播放超过 1 首歌曲
当第一首歌完成时- (void)audioPlayerDidFinishPlaying:successfully: 被调用。
如果我使用该代码,它就可以工作
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
NSString *tempString = @"/";
tempString = [tempString stringByAppendingString:name];
NSString *path = [NSString stringWithFormat:@"%@",[[NSBundle mainBundle] resourcePath]];
path = [path stringByAppendingString:tempString];
NSURL *url = [NSURL fileURLWithPath:path];
NSError *error;
AVAudioPlayer *audioPlayer101 = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
[AppDelegate getAppdelegate].audioPlayerForPlay = audioPlayer101;
[[AppDelegate getAppdelegate].audioPlayerForPlay play];
}
有效
但是,如果我没有将实例放在音频播放器的 perdefined 属性中,它就不会播放。
这是代码
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
NSString *tempString = @"/";
tempString = [tempString stringByAppendingString:name];
NSString *path = [NSString stringWithFormat:@"%@",[[NSBundle mainBundle] resourcePath]];
path = [path stringByAppendingString:tempString];
NSURL *url = [NSURL fileURLWithPath:path];
NSError *error;
AVAudioPlayer *audioPlayer101 = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
[audioPlayer101 play];
}
【问题讨论】:
-
长话短说(请参阅上面评论中的链接)简而言之,ARC 在您创建它后立即释放您
audioPlayer101;最简单的修复方法是制作 storng ivar,就像在你的第一段代码中一样(你在 AppDelegate 中有 ivar) -
在我的场景中,我有多个音频播放器同时播放,我需要每个音频播放器的实例分别。有什么解决方案可以完美实现第二个测试用例。
标签: ios iphone avaudioplayer