2

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?

Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
Yevgen THD
  • 169
  • 1
  • 10

0 Answers0