如何在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];
}
我的UILabel
上有一个nowPlayingViewController
,当用户选择了一首歌时,会弹出MediaItemCollection
。我想将UILabel
/队列中下一个项目的标题存储在{{1}}中 - 所以这是预览下一首歌的内容。
非常感谢任何帮助,谢谢! :)
答案 0 :(得分:1)
保留您的列表(因为您无法在音乐播放器队列中访问)。
@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
"存在&#34 ;? nextItem
"是否存在"?
您可能还需要查看:
@property (nonatomic) MPMusicRepeatMode repeatMode
如果nextItem
可能是第一个项目,或前一个项目是最后一个项目。
答案 1 :(得分:0)
MPMusicPlayerController提供以下实例方法以快速跳到下一首或上一首歌曲:
[musicPlayer skipToNextItem];
[musicPlayer skipToPreviousItem];