ios - 使用谓词后 MPMusicPlayerController 不会自动跳到下一个项目

标签 ios objective-c mpmusicplayercontroller mpmediaquery

我正在开发一个音乐播放器应用程序。我有一个包含 iPod 库的歌曲名称的 tableView。我的问题是,当我选择一个单元格时,它会播放一首特定的歌曲,但当该歌曲完成时,它不会播放自动跳到下一个项目。 这是我选择单元格时的代码:

MPMediaQuery *mq  = [MPMediaQuery songsQuery];
MPMediaPropertyPredicate *songNamePredicate = [MPMediaPropertyPredicate               
predicateWithValue:[songsTitle objectAtIndex:indexPath.row]     
forProperty:MPMediaItemPropertyTitle];
[mq addFilterPredicate:songNamePredicate];
[mp setQueueWithQuery:mq];
[mp play]; 

我真的需要你的帮助。谢谢。

最佳答案

它不会跳到下一首歌曲,因为播放队列只有一个项目。启动时,将播放队列设置为整个歌曲查询。还可以使用 MPMediaQueryitems 属性创建一个 MPMediaItem 数组:

MPMediaQuery *songsQuery = [MPMediaQuery songsQuery];
self.songs = songsQuery.items;
[self.musicPlayer setQueueWithQuery:songsQuery];

tableView:didSelectRowAtIndexPath: 中,让音乐播放器使用 MPMusicPlayerControllersetNowPlayingItem: 方法播放所选项目:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MPMediaItem *song = self.songs[indexPath.row];
    [self.musicPlayer setNowPlayingItem:song];
    [self.musicPlayer play];
}

这是一个示例项目,演示了这一点: https://dl.dropboxusercontent.com/u/1990969/SongsPlayerTableView.zip

关于ios - 使用谓词后 MPMusicPlayerController 不会自动跳到下一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16885697/

相关文章:

iphone - 直接链接到 native Facebook 应用程序 (iOS6) 中的页面

ios - Testflight 中 iOS 的 Firebase 通知问题

ios - CGPath 与 UIBezierPath

iphone - UITableView deleteRowsAtIndexPaths 不删除行

ios - MPMusicPlayerController 第一次不工作

iphone - iTunes 同步后 MPMusicPlayerController 停止工作

ios - 如何在滚动 TableView 期间始终将 TableView 的第一个单元格保持在其 TableView 的顶部

ios - 将代码推送到 github 时出现 Twilio 框架压缩问题

ios - 如何在 Cocos2D 3.x 中为 CCSprite 制作动画?

iOS10.3.x 无法在 MPMusicPlayer 上为 Apple Music 轨道设置 nowPlayingItem