Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 音乐播放器不播放选定的项目_Ios_Objective C_Mpmusicplayercontroller - Fatal编程技术网

Ios 音乐播放器不播放选定的项目

Ios 音乐播放器不播放选定的项目,ios,objective-c,mpmusicplayercontroller,Ios,Objective C,Mpmusicplayercontroller,在应用程序的初始启动时,第一次选择任何歌曲时,应用程序从不播放实际选择的歌曲 由于某种原因,应用程序将开始播放音乐应用程序中上次播放的任何歌曲。即使我正在将所选歌曲传递给它,并且所有内容都在控制台中正常记录 但从那时起一切正常,应用程序播放选定的歌曲。 我不知道发生了什么,有什么想法吗 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if([segue.identifier isEqualToS

在应用程序的初始启动时,第一次选择任何歌曲时,应用程序从不播放实际选择的歌曲

由于某种原因,应用程序将开始播放音乐应用程序中上次播放的任何歌曲。即使我正在将所选歌曲传递给它,并且所有内容都在控制台中正常记录

但从那时起一切正常,应用程序播放选定的歌曲。

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

- (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);
        }
    }
}

在为音乐播放器分配队列时,会出现一些有趣的边缘情况,这些情况因系统版本而异。设置队列后,调用

[musicPlayer setCurrentPlaybackTime: 0];

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

试试skipToNextItem而不是setItem并播放。@Johneleman你是说类似于
[MusicLayer skipToNextItem]
而不是
[MusicLayer setNowPlayingItem:rowItemSong]+
[MusicLayer play]?是的,我就是这个意思。alexcurylo的回答很有趣@约翰尼勒曼真棒,非常感谢@约翰·内勒曼只是想知道,这样做总是会跳到下一首歌?因为在我最初的问题中,奇怪的edge案例只发生在应用程序第一次运行时,所以我不希望它总是跳到下一首歌曲,因为它不会播放选定的歌曲。这真的很好,而且它在第一次运行时就起作用了,所以我会继续测试它。想知道你以前是怎么遇到这种边缘案例的吗?没有什么文档,也没有多少其他人使用它来编写代码,所以如果没有你的帮助和拯救,我可能要花上一辈子的时间才能做到这一点?正好在OS 3发布时,我正在使用应用程序编写播放列表,因此,我模模糊糊地记得,在API的最初几次修订中,是什么帮助了我。但一般来说,“消除API所有可能的内部状态”是解决隔离/消除意外行为问题的一个好方法。哇,这太好了,也是解决这个问题的一个好方法!感谢Bunch一直在测试这一点,类似的事情发生了:我运行了应用程序fresh,选择了一首歌曲,但应用程序显示了今天早些时候音乐应用程序中播放的最后一首歌曲。唯一的一点不同是,今天早些时候在音乐应用程序中播放的最后一首歌没有开始播放,也不允许我跳回到/前进到其他歌曲。还有什么想法吗?嗯。这对我来说是新的。但在快速搜索时,我看到了一些迹象表明,在iOS9中,wow,MPMusicLayerController在各种方面都有问题。试着在iOS 10上运行并归档雷达,这样工程师就可以得到指定的时间来修复它!