如何使用 MPMusicPlayerController 从特定索引播放 MPMediaItemCollection?

Posted

技术标签:

【中文标题】如何使用 MPMusicPlayerController 从特定索引播放 MPMediaItemCollection?【英文标题】:How to play MPMediaItemCollection from a particular index using MPMusicPlayerController? 【发布时间】:2014-10-19 06:31:35 【问题描述】:

我的应用中有一个播放列表屏幕,用户可以在其中选择播放列表中的任何歌曲,应用将从该歌曲开始播放。

我使用以下代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    MPMediaItem *selectedSong = [currentQueue.items objectAtIndex:indexPath.row];
    [audioCoordinator.musicController setNowPlayingItem: selectedSong];
    [audioCoordinator playAllSound];

它适用于包含所有不同歌曲的播放列表,但由于此播放列表允许重复歌曲,问题就来了。对于这个播放列表:

    很久很久以前 我的十二月 很久很久以前

当用户点击第 3 首歌曲时,应用会播放第 1 首歌曲,因为它们具有相同的名称,这不是正确的行为。

我们如何为 MPMusicPlayerController 的 setNowPlayingItem 函数提供一个索引,以便它可以从那里开始播放?

【问题讨论】:

【参考方案1】:

找到解决方案:

在函数playAllSound中:

while (self.musicController.indexOfNowPlayingItem != self.currentSongIndex) 
    [self.musicController skipToNextItem];

这里 self.currentSongIndex 的值与 indexPath.row 相同,因为 tableViewController 的 didSelectCell 函数中有一个 audioCoordinator.currentSongIndex = indexPath.row 行。

【讨论】:

【参考方案2】:

很明显 selectedSong 基于 indexPath.row,记录 indexPath.row 你检查 playAllSound 我认为它应该播放

【讨论】:

对不起,我不明白你想说什么,但是你的“记录 indexPath.row 并检查 playAllSound”给了我灵感,我找到了解决方案,所以谢谢。 我的意思是说我们正在参考点击的单元格选择正确的歌曲,但您使用的是 playAllSound,在我看来,它只播放一首歌曲的 shud b playSound 不好意思,playAllSound 是一个播放一首歌曲的函数,但它之所以称为“AllSong”,是因为它不仅播放歌曲,还会同时播放其他歌曲。

以上是关于如何使用 MPMusicPlayerController 从特定索引播放 MPMediaItemCollection?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?