MPMediaPlayer indexOfNowPlayingItem 给出当前索引 9223372036854775807

Posted

技术标签:

【中文标题】MPMediaPlayer indexOfNowPlayingItem 给出当前索引 9223372036854775807【英文标题】:MPMediaPlayer indexOfNowPlayingItem giving current index of 9223372036854775807 【发布时间】:2015-09-11 14:45:01 【问题描述】:

我正在尝试制作一个音乐播放器,这是我放置NSLog 以显示当前索引的位置:

- (void) handle_NowPlayingItemChanged: (id) notification

    MPMediaItem *currentItem = [musicPlayer nowPlayingItem];
    NSUInteger currentIndex = [musicPlayer indexOfNowPlayingItem];
    UIImage *artworkImage = [UIImage imageNamed:@"NoSongImage.png"];
    MPMediaItemArtwork *artwork = [currentItem valueForProperty:MPMediaItemPropertyArtwork];

if (artwork) 
    artworkImage = [artwork imageWithSize: CGSizeMake (200, 200)];


[self.artwork setImage:artworkImage];

NSString *titleString = [currentItem valueForProperty:MPMediaItemPropertyTitle];
if (titleString) 
    self.songName.text = [NSString stringWithFormat:@"%@",titleString];
 else 
    self.songName.text = @"Unknown title";


    NSLog(@"%li", currentIndex);

这是我的didSelectRowAtIndexPath 我的UITableView

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
if (songsList == YES)
    NSUInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row];
    MPMediaItem *selectedItem = [[songs objectAtIndex:selectedIndex] representativeItem];
    [musicPlayer setQueueWithItemCollection:[MPMediaItemCollection collectionWithItems:[songsQuery items]]];
    [musicPlayer setNowPlayingItem:selectedItem];
    [musicPlayer play];
    songsList = NO;

else if (albumsList == YES && albumsSongsList == NO)
    albumsSongsList = YES;
    NSUInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row];
    MPMediaItem *selectedItem = [[albums objectAtIndex:selectedIndex] representativeItem];
    albumTitle = [selectedItem valueForProperty:MPMediaItemPropertyAlbumTitle];
    MPMediaItemArtwork *albumArtwork = [selectedItem valueForProperty:MPMediaItemPropertyArtwork];
    albumSelected = [albumArtwork imageWithSize: CGSizeMake (44, 44)];
    [self.tableView reloadData];
    [self.tableView setContentOffset:CGPointZero animated:NO];

else if (albumsSongsList == YES)
    albumsSongsList = NO;
    MPMediaQuery *albumQuery = [MPMediaQuery albumsQuery];
    MPMediaPropertyPredicate *albumPredicate = [MPMediaPropertyPredicate predicateWithValue: albumTitle forProperty: MPMediaItemPropertyAlbumTitle];
    [albumQuery addFilterPredicate:albumPredicate];
    NSArray *albumTracks = [albumQuery items];
    NSUInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row];
    MPMediaItem *selectedItem = [[albumTracks objectAtIndex:selectedIndex] representativeItem];
    [musicPlayer setQueueWithItemCollection:[MPMediaItemCollection collectionWithItems:[albumQuery items]]];
    [musicPlayer setNowPlayingItem:selectedItem];
    [musicPlayer play];
    

BOOLS 向tableView willDisplayCell 确定要加载哪个表。 以上都以正确的内容正确显示UITableView。 问题是,当我打开专辑并选择一首歌曲时,它似乎播放专辑的第一首歌曲(在tableView 的顶部)。如果我再次返回专辑并选择不同的歌曲,则选择了正确的歌曲。 再说一次,如果我再次返回并选择一首歌曲,第一首歌曲会再次播放并重复...

在我的 NSLog 中,播放第一首歌的原因是 currentIndex9223372036854775807

为什么返回NSNotFoundselectedIndex(例如4)在albumTracks的数组中。 这也发生在歌曲的 1/3 次。 非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

在 64 位系统上 NSNotFound 的值是多少?什么是 2^63 - 1?

【讨论】:

这并不是真正有用的答案,而是作为评论。 为什么返回NSNotFoundselectedIndex (例如4)在albumTracks的数组中。【参考方案2】:

在设置 nowPlayingItem 之前尝试暂停或停止您的音乐播放器。有时随机播放模式也可以改变索引,尝试将其关闭。

【讨论】:

以上是关于MPMediaPlayer indexOfNowPlayingItem 给出当前索引 9223372036854775807的主要内容,如果未能解决你的问题,请参考以下文章

MPMediaPlayer indexOfNowPlayingItem 给出当前索引 9223372036854775807

当我在 ios 8 中旋转 MPMediaPlayer 时它变小了

player.duration 在视频文件的 MPMoviePlayerController 中始终显示为零

如何在ios中播放视频播放器

如何在 iOS 中检测 wifi 或 3G 信号强度?