Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios AVAudioPlayer问题_Ios_Iphone_Avaudioplayer - Fatal编程技术网

Ios AVAudioPlayer问题

Ios AVAudioPlayer问题,ios,iphone,avaudioplayer,Ios,Iphone,Avaudioplayer,使用AVAudio播放器播放1首以上歌曲 当第一首歌曲完成时-voidAudioPlayerDifinishPlaying:成功:调用 如果我用那个代码,它就行了 - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag { NSString *tempString = @"/"; tempString = [tempString stringByAppendingSt

使用AVAudio播放器播放1首以上歌曲

当第一首歌曲完成时-voidAudioPlayerDifinishPlaying:成功:调用

如果我用那个代码,它就行了

- (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代码

AVAudioPlayer  *audioPlayer101 = [[AVAudioPlayer alloc] initWithContentsOfURL:url    error:&error];
[audioPlayer101  play];
对于非圆弧,将编译为

AVAudioPlayer  *audioPlayer101 = [[AVAudioPlayer alloc] initWithContentsOfURL:url    error:&error];
[audioPlayer101  play];
[audioPlayer101 release];
并且audioPlayer101将在创建后立即释放,因为系统不会自动保留它,并释放lead以使播放停止


如果使用instance.audioPlayerForPlay=audioPlayer101;就像您的代码一样,而且audioPlayerForPlay的属性很强,该播放将由实例保留,因此该播放可以继续播放。您可以尝试将audioPlayerForPlay设置为“弱”,之前的代码将无法播放。

长话短说,请参见上面评论中的链接,ARC在您创建audioPlayer101后立即释放您的audioPlayer101;最简单的修复方法是创建storng ivar,就像在您的第一段代码中,在AppDelegated中有ivar一样。在我的场景中,我有多个音频播放器同时播放,我需要每个音频播放器的实例。是否有任何解决方案可以完美地实现第二个测试用例。