我在 MPMediaItemsCollection 中设置了 N 个项目,其中一些项目不是唯一的(该集合代表一个播放列表,同一首歌曲可能会出现两次)。
- (void)setLastSongWithItemCollection:(MPMediaItemCollection *)itemCollection
{
[_musicPlayer setQueueWithItemCollection: itemCollection];
NSLog(@"itemCollection count %u", itemCollection.count);
NSLog(@"itemCollection lastObject index: %u", [itemCollection.items indexOfObject:itemCollection.items.lastObject]);
_musicPlayer.nowPlayingItem = [[itemCollection items] lastObject];
}
在一个示例中,我正在生成包含 4 首歌曲的 itemCollection,其中最后一首歌曲是第一首重复的歌曲。如果我尝试获取列表中的最后一个对象,_musicPlayer 将始终播放第一个项目。
第一个 NSLog 打印“itemCollection count 4”,清楚地表明 items 数组中有四个项目。但是,第二个 NSLog 打印“itemCollection lastObject index:0”,表示 items.lastObject 不返回对象和最后一个索引,而是返回相同媒体项出现的第一个索引。
任何人都可以对此有所了解吗?
更正:正如所指出的,indexOfObject:不是返回重复对象索引的有效测试
尽管如此,_musicPlayer.nowPlayingItem = [[itemCollection items] lastObject] 将与 lastObject 相同的第一个实例设置为媒体播放器。似乎 nowPlayingItem 设置器在 itemCollection 上调用 indexOfObject:。解决方法?
跟进
似乎没有办法在 MPMediaPlayer 的队列中选择索引,并且setNowPlayingItem:调用indexOfObject:来查找选定的媒体项。结果是indexOfNowPlayingItem将返回队列中与 nowPlayingItem 相同的第一个实例的索引。就我而言,这会影响我在应用程序中的队列的视觉表示(它是一个滚动视图,每首歌曲都有一个面板)。MPMediaItemCollection 可能不适用于 MPMediaItems 可以多次出现的播放列表。为了获得有关该主题的更多信息,我将填写一份错误报告。