AVAudioPlayer在播放新声音时冻结UI

时间:2016-11-29 10:00:06

标签: ios objective-c avaudioplayer

我是iOS的新手,我从早上开始搜索修复此问题并且还没有找到解决方案,我在线有超过6000个声音文件我希望在用户使用AVAudioPlayer时播放点击单元格,我在didSelectRowAtIndexPath:中实现了它 像这样:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@", [soundsArray objectAtIndex:(int)indexPath.row]];
     NSData *soundData = [NSData dataWithContentsOfURL:url];
     _audioPlayer = [[AVAudioPlayer alloc] initWithData:soundData  error:NULL];
        [_audioPlayer play];
    }

问题是,每当我点击任何一行时,整个用户界面就会冻结,直到从互联网上加载完整的声音文件为止, 对于较大的文件,需要更长的时间。

我尝试使用AVPlayer并且工作正常,但我需要AVAudioPlayer因为我似乎很容易与之合作 -(void)AVAudioPlayerDidFinishPlaying:(AVAudioPlayer *)Player successfully:(BOOL)flag

这就是我想用AVAudioPlayer

实现它的原因

我希望你理解我的问题, 抱歉我的英语不好。

1 个答案:

答案 0 :(得分:1)

永远不要使用

 NSData *soundData = [NSData dataWithContentsOfURL:url];

这将阻止你的用户界面。

您需要使用NSURLSession异步下载数据。