2010-10-11 9 views
2

I "essaie d'utiliser le MPMusicPlayerController pour jouer de la musique, et je veux aussi recevoir la notification MPMusicPlayerControllerPlaybackStateDidChange j'ai créé mon lecteur et l'enregistrement de notification à peu près comme l'échantillon (qui fonctionne, BTW - il reçoit des notifications correctement).:MPMusicPlayerController n'affiche pas les notifications?

- (id) initWithPlaylist:(MPMediaPlaylist*)list { 
    if (self = [super init]) { 
     player = [MPMusicPlayerController applicationMusicPlayer]; 
     [player retain]; 

     NSLog(@"setting up player"); 
     [plaayer setQueueWithItemCollection:list]; 
     [player setShuffleMode:MPMusicShuffleModeOff]; 
     [player setRepeatMode:MPMusicRepeatModeNone]; 

     NSLog(@"registering MPMusicPlayerController Notifications"); 
     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(handle_itemChanged:) 
                name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification 
                object:nil]; 
     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(handle_stateChanged:) 
                name:MPMusicPlayerControllerPlaybackStateDidChangeNotification 
                object:nil]; 

     NSLog(@"turning on player notifications"); 
     [player beginGeneratingPlaybackNotifications]; 
    } 
} 

Je reçois beaucoup de bupkis. Les méthodes handle_itemChanged: et handle_stateChanged: sont tout simplement vide, sauf pour une déclaration NSLog pour montrer qu'ils ont été frappés, et il semble jamais qu'ils sont frappés. Les déclarations contenues dans NSLoginitWithPlaylist: Les éléments ci-dessus sont juste un objet métier dans mon application. Il ne s'agit pas d'un contrôleur de vue ou de vue

Des idées? La chose bizarre est que l'échantillon AddMusic fonctionne très bien pour moi, et je ne peux pas dire que je "fais les choses différemment en ce qui concerne la MPMusicPlayerController et ses notifications

Mise à jour. J'ai ajouté cette ligne dans mon délégué app pour voir l'inondation complète des notifications.

[[NSNotificationCenter defaultCenter] addObserverForName:nil object:nil queue:nil usingBlock:^(NSNotification *n) { NSLog(@"notification: %@", n); }]; 

Je vois toutes sortes de notifications en cours d'impression à la console, mais aucun du contrôleur de lecteur multimédia

+0

aarrrgggh! C'est bonkers! Je n'arrive toujours pas à comprendre pourquoi les notifications ne sont pas affichées. –

Répondre

2

Enfin, je me suis dit la réponse : le joueur doit être envoyé messa ges sur le fil principal. Cela a du sens rétrospectivement, mais c'était complètement non-évident jusqu'au moment où il m'est apparu. J'ai modifié le bug que j'ai ouvert pour être un bug sur la documentation car je n'ai jamais repéré où ils ont mentionné que le joueur doit être opéré sur le thread principal.

+0

J'ai exactement le même problème, mais mes notifications sont enregistrées dans la méthode 'viewDidLoad' d'un contrôleur de vue. Je suis en mesure de recevoir des notifications pour 'MPMediaLibraryDidChangeNotification' de' MPMediaLibrary' mais je ne peux pas en recevoir pour 'MPMusicPlayerControllerNowPlayingItemDidChangeNotification'. Des idées? – sooper

7

Vous devez ajouter une autre ligne au-dessus de ces lignes:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(handle_itemChanged:) 
              name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification 
              object:nil]; 

qui est:

[myPlayer beginGeneratingPlaybackNotifications]; 

cela a fonctionné pour moi.

+0

Économiseur de vie. Je vous remercie. –

Questions connexes