2016-12-17 13 views
0

Я хочу создать массив из AVPlayerItem объектов из другого массива, используя строку в цикле. Он работает для одного элемента, но не для всего массива.iOS - Невозможно использовать AVQueuePlayer initwithitems()

MPMediaQuery *albumQuery = [MPMediaQuery albumsQuery]; 
MPMediaPropertyPredicate *albumPredicate = [MPMediaPropertyPredicate predicateWithValue:@"Out Of Exile" forProperty:MPMediaItemPropertyAlbumTitle]; 
[albumQuery addFilterPredicate:albumPredicate]; 
NSArray *songs = [albumQuery items]; 
NSMutableArray <AVPlayerItem*> *items; 
NSUInteger i = 0; 

while(i < [songs count]){ 
    AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:[[songs objectAtIndex:i] valueForProperty:MPMediaItemPropertyAssetURL]]; 
    [items addObject:playerItem]; 
    i++; 
} 

AVPlayerItem *item = [[AVPlayerItem alloc] initWithURL:[[songs objectAtIndex:index] valueForProperty:MPMediaItemPropertyAssetURL]]; //manually created item which works 
_player = [[AVQueuePlayer alloc] initWithItems:items]; 

[_player play]; 

Итак, моя проблема заключается в том, что я не могу правильно инициализировать AVQueuePlayer с и массив, и это сводит меня с ума. Если я инициализирую его InitWithPlayerItem и добавлю элемент, который я создал, он работает (играет), но он не работает ни с одним объектом из массива элементов.

Даже при звонке InitWithItems:items[index*] ничего не происходит.

ответ

1

Ваш код работает; причина, почему добавление items в AVQueuePlayer не работает во время добавления вручную один единственный item еще после работы, потому что вы забыли инициализировать массив:

NSMutableArray <AVPlayerItem*> *items = [[NSMutableArray alloc] init]; 

Добавление выше линии до ввода цикл и AVQueuePlayer должен работать.

Надеюсь, это поможет.