MPMediaPlayer indexOfNowPlayingItem, дающий текущий индекс 9223372036854775807

Я пытаюсь сделать музыкальный плеер, это где я положил 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];
    }
}

БУЛЫ определяют до tableView willDisplayCell какую таблицу загрузить. Выше всего отображается UITableView правильно с правильным содержанием. Проблема в том, что когда я открываю Альбомы и выбираю песню, кажется, что она воспроизводит первую песню альбома (вверху tableView) вместо Если я затем снова вернусь к альбомам и выберу другую песню, будет выбрана правильная песня. Опять же, если я вернусь еще раз и выберу песню, первая песня будет воспроизведена снова и будет повторяться...

В моем NSLog, причина его воспроизведения первой песни из-за currentIndex из 9223372036854775807

Почему это возвращается NSNotFound? selectedIndex (например 4) находится в массиве albumTracks, Это происходит 1/3 раза и для песен. Ваша помощь очень ценится.

2 ответа

Каково значение NSNotFound в 64-битной системе? Что такое 2^63 - 1?

Попробуйте приостановить или остановить музыкальный проигрыватель перед установкой nowPlayingItem. Иногда режим Shuffle также может изменить индекс, попробуйте отключить его.

Другие вопросы по тегам