【问题标题】:Music player does not play item selected音乐播放器不播放所选项目
【发布时间】:2016-07-09 12:36:19
【问题描述】:

应用首次启动时,第一次选择任何歌曲时,应用从不播放实际选择的歌曲

出于某种原因,该应用将开始播放上次在“音乐”应用中播放的歌曲。即使我将选定的歌曲传递给它,并且一切都在控制台中正常登录。

但此后一切正常,应用播放所选歌曲。

我不知道发生了什么,有什么想法吗?

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([segue.identifier isEqualToString:@"nowPlaying"]){
        // send to now playing
        NSUInteger selectedSection = [[self.tableView indexPathForSelectedRow] section];
        NSUInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row];        
        NSArray *albumTracksArray = [self albumTracksForSegue:[[albumsArrayForTVC objectAtIndex:selectedSection] representativeItem]];
        MPMediaItem *rowItemSong = [[albumTracksArray objectAtIndex:selectedIndex] representativeItem];
        MPMusicPlayerController *musicPlayer = [MPMusicPlayerController systemMusicPlayer];
        [musicPlayer setQueueWithItemCollection:[MPMediaItemCollection collectionWithItems:albumTracksArray]];

    if ([musicPlayer nowPlayingItem] == rowItemSong) {
        // Nothing
        NSLog(@"These songs are equivalent: %@", [musicPlayer nowPlayingItem]);
        [musicPlayer setNowPlayingItem:rowItemSong];
        [musicPlayer play];
        NSLog(@"Row Item Song Same: %@", rowItemSong);
    } else {
        [musicPlayer setNowPlayingItem:rowItemSong];
        [musicPlayer play];
        NSLog(@"Row Item Song Different: %@", rowItemSong);
        }
    }
}

【问题讨论】:

  • 尝试使用 skipToNextItem 而不是 setItem 并播放。
  • @johnelemans 你是在说[musicPlayer skipToNextItem] 而不是[musicPlayer setNowPlayingItem:rowItemSong]; + [musicPlayer play];
  • 是的,我就是这个意思。 alexcurylo 的回答很有趣!
  • @johnelemans 太棒了,非常感谢!
  • @johnelemans 只是想知道,这种方式总是会跳到下一首歌吗?因为在我最初的问题中,奇怪的边缘情况只发生在应用程序第一次运行时,所以我不希望它总是跳到下一首歌曲,因为它不会播放被选中的歌曲。跨度>

标签: ios objective-c mpmusicplayercontroller


【解决方案1】:

在将队列分配给音乐播放器时会出现一些有趣的边缘情况,它们因系统版本而异。一个经常有用的技巧是在你设置队列之后,调用

[musicPlayer setCurrentPlaybackTime: 0];

试一试,看看它是否适合你。

【讨论】:

  • 这真的很好,第一次就成功了,所以我会继续测试它。随机想知道您以前是如何遇到这样的边缘情况的?文档很少,也没有多少其他人使用它来将代码放在那里,所以如果没有你帮助我和拯救我,我可能会花很长时间才能做到这一点?
  • 碰巧在 OS 3 出来的时候我正在写一个使用播放列表的应用程序,所以我隐约记得在 API 的前几次修订中帮助过的那种事情。但总的来说,“消除 API 的所有可能的内部状态”是解决隔离/消除意外行为问题的好方法。
  • 哇,太棒了,也是一种接近它的好方法!非常感谢
  • 对此进行了更多测试,并且发生了类似的事情:我重新运行应用程序,选择了一首歌曲,但该应用程序显示了今天早些时候在音乐应用程序中播放的最后一首歌曲。唯一的小不同是,今天早些时候在音乐应用程序中播放的最后一首歌曲没有开始播放,并且不允许我向后/向前跳到其他歌曲。还有什么想法吗?
  • 嗯。这对我来说是新的。但是快速搜索一下,我看到很多 questions like this 表示哇,MPMusicPlayerController 在 iOS 9 中以各种方式搞砸了。尝试在 iOS 10 上运行并归档 Radars,以便工程师可以得到分配的时间来修复它!
猜你喜欢
  • 1970-01-01
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 2021-07-26
相关资源
最近更新 更多