2014-01-13 3 views
0

Предположим, что это все песни в NSArray, но он играет только один и останавливается. Что я делаю не так? Массив содержит целую связку ссылок на разные отформатированные песни .mp3.Looping Through 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.

Вы можете создать плеер, уже загруженный предметами (класс AVPlayerItem) либо с initWithItems, либо queuePlayerWithItems. Затем просто назовите play (он унаследован от AVPlayer), и он должен играть элементы один за другим.

См:

AVQueuePlayer docs

AVPlayer docs

AV Foundation Programming Guide

AVPlayerItem docs

+0

Должен ли я просто повторять цикл в 'advanceToNextItem'? –

+0

Проверьте отредактированный ответ. – jcm