I have problem with removeAllItems on AVQueuePlayer.
I using AVQueuePlayer for playing music from the web. For playing next song, in this class we have method advanceToNextItem. But for previous we should create new queue.
Why that I do it so:
- (void) initPlayer{
...
playlist = [NSMutableArray array];
playlistItems = [NSMutableArray array];
...
player = [AVQueuePlayer queuePlayerWithItems:nil];
player.actionAtItemEnd = AVPlayerActionAtItemEndAdvance;
...
}
- (void) play{
if ([player.items count] <= 0){
[self playAtIndex:0]; //first run fires here
}
[player play];
}
- (void)playAtIndex:(int)index
{
[player removeAllItems]; // <------at first run it work correctly
for (int i = index; i <playlistItems.count; i ++) {
AVPlayerItem* obj = [playlistItems objectAtIndex:i];
if ([player canInsertItem:obj afterItem:nil]) {
[obj seekToTime:kCMTimeZero];
[player insertItem:obj afterItem:nil];
}
}
}
- (void) addTracks:(NSArray *)tracks{
[playlist addObjectsFromArray:tracks];
for (Track *track in tracks){
AVPlayerItem *item = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:track.trackURL]];
...
[playlistItems addObject:item];
}
}
Then I work with player:
[player initPlayer];
[player addTracks:tracksList];
[player play]; // all works fine, play next, pause and so on
...
somewhere I go to prev track and call playAtIndex:x, where first calls [player removeAllItems] and programm crashes on it.
And Xcode returns me:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 2147483647 beyond bounds [0 .. 153]'
I tried to call just [player removeAllItems] and it crashes.
Where could be problem?