我有一个NSArray的歌曲,并希望将它们放在播放列表中。当我播放播放列表时,我使用indexOfObject
来计算队列中的当前歌曲索引。我已经覆盖了isEqual
,所以要表明两个媒体项目是相同的,并且不希望破解这种方法。我尝试了NSOrderedSet而不是NSArray,它显示了每首歌一次,而不是同一首歌中有多少个实例。它们是一个混合NSArray和NSOrderedSet的类,以便每个索引都是唯一的对象,但在不同的索引处可能有重复的对象吗?
代码:
- (PlayerItem *)nextSong{
if(queue.count > 0){
NSInteger songIndex = [queue indexOfObject:currentSong];
NSLog(@"%ld in %lu", (long)songIndex, (unsigned long)queue.count);
songIndex = songIndex + 1;
if (songIndex < [queue count]){
return queue[songIndex];
}else{
return queue[0];
}
}
}
return nil;
}
来自下方的评论:
我的意思是,如果我循环播放歌曲,那么它可以播放歌曲1然后再播放1 那么2然后3然后再3。这是不可能的,因为 indexOfObject始终返回第一个重复对象。
答案 0 :(得分:0)
问题在于您找到播放列表当前播放的哪首歌曲:您似乎将currentSong
存储在ivar左右。
由于这首歌可能在播放列表中出现两次,因此知道正在播放的内容的信息不足。例如:
“我的播放列表是A,A,B,C,C。现在A正在播放。”
正如您所看到的,根据这些信息,您无法知道下一首歌是什么。
解决方案是将索引存储在播放列表或其他一些信息中,以了解播放列表中的进度。