在iOS中启用随机播放模式时,NowPlayingItem的索引是错误的

时间:2013-02-02 08:41:48

标签: ios cocoa-touch shuffle mpmediaitem

我现在正在播放带有iPodMusicPlayer加载到myArray的iPod库中的歌曲。

我们可以使用indexOfNowPlayingItem从NowPlaying音乐中获取索引。

但是当Shuffle Modeon时,indexOfNowPlayingItem Property的返回索引完全错误。

ShuffleMode关闭之前,indexOfNowPlayingItem可以使用并且正确无误。

但是当ShuffleMode打开时,indexOfNowPlayingItem计数仅增加1(++)。

像那样

indexOfNowPlayingItem++;

对于ShuffleMode来说不正确。

那么当ShuffleMode开启时如何才能获得正确的索引?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我的解决方案是在设置播放列表时,还要设置一个带有(index,MPMediaEntityPropertyPersistentID)播放列表的NSMutableDictionary。

当你需要歌曲索引时,只需获得歌曲持久性ID。

- (void) setPlaylistIndexDictionary:(MPMediaItemCollection *)playlistItems
{
    playlistIndexDict = [[NSMutableDictionary alloc] init];
    NSNumber *count = [[NSNumber alloc] initWithInt:0];
    for (MPMediaItem *item in [playlistItems items]) {
        [playlistIndexDict setObject:count forKey:[item valueForProperty:MPMediaEntityPropertyPersistentID]];
        count = [NSNumber numberWithInt:count.intValue + 1];
    }
}


- (NSString *) getCurrentSongId
{
    NSString* songId = [[musicPlayer nowPlayingItem] valueForProperty:MPMediaEntityPropertyPersistentID];

    return songId;
}

使用:

NSString *songId = [musicController getCurrentSongId];
int songIndex = [[[musicController playlistIndexDict] objectForKey:songId] intValue];