我对 AVQueuePlayer 上的 removeAllItems 有疑问。
我使用 AVQueuePlayer 播放来自网络的音乐。为了播放下一首歌曲,在这个类中我们有方法 advanceToNextItem。但是对于以前我们应该创建新队列。
为什么我这样做:
- (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];
}
}
然后我与播放器一起工作:
[player initPlayer];
[player addTracks:tracksList];
[player play]; // all works fine, play next, pause and so on
...
在某个地方我去上一首曲目并调用playAtIndex:x,首先调用[player removeAllItems]并且程序在它上面崩溃。
Xcode 返回我:
*** 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*** -[__NSArrayM objectAtIndex:]: index 2147483647 beyond bounds [0 .. 153]”
我试图只调用 [player removeAllItems] 并且它崩溃了。
哪里可能有问题?