2016-07-02 5 views
2

Первоначальный запуск приложения при первом выборе песни приложение никогда не воспроизводит выбранную песню.Музыкальный проигрыватель не играет ни одного выбранного элемента

Приложение начнет воспроизводить любую песню, которая в последний раз воспроизводится в приложении «Музыка» по какой-либо причине. Несмотря на то, что я передаю выбранную песню, и все записывается в консоль отлично.

Но с этого момента все работает отлично, и приложение воспроизводит выбранную песню.

Я понятия не имею, что происходит, любые идеи?

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

Попробуйте использовать skipToNextItem вместо setItem и играть. –

+0

@johnelemans вы говорите что-то вроде '[musicPlayer skipToNextItem]' вместо '[musicPlayer setNowPlayingItem: rowItemSong];' + '[musicPlayer play];'? – SRMR

+0

Да, вот что я имел в виду. Ответ alexcurylo интересен! –

ответ

1

При назначении очередей музыкальному проигрывателю появляется несколько смешных случаев, которые варьируются в зависимости от версии системы. Трюк, который часто помогает, - после того, как вы установили очередь, позвоните по телефону

[musicPlayer setCurrentPlaybackTime: 0]; 

Сделайте снимок и посмотрите, работает ли он для вас.

+0

Это действительно хорошо, и он работал в первый раз, поэтому я буду его проверять. Случайно интересно, как вы раньше сталкивались с такими крайними случаями? Есть небольшая документация, и не многие другие люди используют ее там, где есть код, поэтому мне потребовалось бы навсегда, чтобы потенциально прийти к этому без вас, помогая мне и спасая меня? – SRMR

+1

Случилось так, что я писал приложение, использующее плейлист, когда вышел OS 3, поэтому я смутно вспомнил то, что помогло с помощью первых нескольких версий API. Но в основном в основном это то, что «устранить все возможное внутреннее состояние API» - это правильный способ подойти к проблеме изоляции/устранения неожиданного поведения. –

+0

Ничего себе, это здорово, и отличный способ приблизиться к нему! Спасибо, куча – SRMR

Смежные вопросы