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 также может изменить индекс, попробуйте отключить его.