2014-01-13 232 views
0

这是假设播放NSArray中的所有歌曲,但它只播放一个并停止播放。我究竟做错了什么?该数组包含一大堆指向不同.mp3格式化歌曲的链接。循环播放NSArray

NSArray *array = [myString componentsSeparatedByString:@"\n"]; 

int nextTag = 1; 
for (soundPath in array) { 
    NSURL *url = [NSURL URLWithString:soundPath]; 
    asset = [AVURLAsset URLAssetWithURL:url options:nil]; 

    yourMediaPlayer = [[MPMoviePlayerController alloc] initWithContentURL:url]; 
    yourMediaPlayer.controlStyle = MPMovieControlStyleNone; 
    yourMediaPlayer.currentPlaybackTime = 0; 
    yourMediaPlayer.shouldAutoplay = FALSE; 
    [yourMediaPlayer play]; 
    nextTag++; 
} 
+0

1.由于您使用的快速列举你不需要保证指数的跟踪,这是我认为'nextTag'所做的。 2.每次迭代创建一个新的'MPMoviePlayerController'并加载一首新歌曲,而不管歌曲是否完成播放。 – jcm

+0

@jcm所以你说的是我应该从循环中移除MPMoviePlayerController并将它放在它之外?如果我这样做,那么音乐仍然只会播放一次。 –

+0

另外,在加载下一首歌曲之前,您并未等待歌曲完成。 – jcm

回答

2

,而不是试图让MPMoviePlayerController发挥列表的项目使用AVQueuePlayer代替。它有一个方便的advanceToNextItem方法。

您可以使用initWithItemsqueuePlayerWithItems创建已装载项目(类别AVPlayerItem)的玩家。然后只需拨打play(继承自AVPlayer),它应该依次播放这些项目。

请参见:

AVQueuePlayer docs

AVPlayer docs

AV Foundation Programming Guide

AVPlayerItem docs

+0

我应该重复'advanceToNextItem'中的循环吗? –

+0

检查编辑的答案。 – jcm