如何找出MPMediaItem
集合中下一个项目的名称?我更愿意将其存储为MPMediaItem
。
我有一个songsViewController
,它有所有歌曲的tableView
。这是我的didSelectRowAtIndexPath
代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MPMediaItem *selectedItem;
selectedItem = [[songs objectAtIndex:indexPath.row] representativeItem];
MPMusicPlayerController *musicPlayer = [MPMusicPlayerController iPodMusicPlayer];
[musicPlayer setQueueWithItemCollection:[MPMediaItemCollection collectionWithItems:[songsQuery items]]];
[musicPlayer setNowPlayingItem:selectedItem];
nowPlayingViewController *nowPlaying = [[rightSideMenuViewController alloc]
initWithNibName:@"nowPlayingViewController" bundle:nil];
[self presentViewController:nowPlaying animated:YES completion:nil];
[musicPlayer play];
}
我在我的nowPlayingViewController
上有一个UILabel
,当用户选择了一首歌时,它会弹出。我想在MediaItemCollection
/队列中存储下一个项目的标题,以便在UILabel
中-因此它是下一首歌曲的预览。
任何帮助将非常感激,谢谢!:)
保留您的列表(因为您无法访问musicplayer队列)
@property (nonatomic, strong) NSArray *playlist;
当你这样做的时候:
[musicPlayer setQueueWithItemCollection:[MPMediaItemCollection collectionWithItems:[songsQuery items]]];
添加:
playlist = [songsQuery items];
获取上一项/下一项:
-(MPMediaItem *)nextItem
{
int currentIndex = [musicPlayer indexOfNowPlayingItem];
MPMediaItem *nextItem = [playlist objectAtIndex:currentIndex+1];
return nextItem
}
-(MPMediaItem *)previousItem
{
int currentIndex = [musicPlayer indexOfNowPlayingItem];
MPMediaItem *previousItem = [playlist objectAtIndex:currentIndex-1];
return previousItem;
}
重要提示:
我没有检查当前项目是否是playlist
中的第一个/最后一个(根据你是否想要上一个/下一个)项目。所以要小心NSArray
的边界,否则你会得到:
NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index Z beyond bounds [X .. Y]
那么previousItem
"存在"吗?nextItem
"存在"吗?
您可能还需要查看:
@property (nonatomic) MPMusicRepeatMode repeatMode
如果nextItem
可能是第一项,或者前一项是最后一项
MPMusicPlayerController提供了以下实例方法来快速跳转到下一首或上一首歌曲:
[musicPlayer skipToNextItem];
[musicPlayer skipToPreviousItem];