Sto utilizzando una proprietà di lettore musicale per il controller del lettore iPod.MPMusicPlayerController: l'iPod interrompe l'invio di notifiche, quando l'app iPod viene interrotta in background
// .h
@property (nonatomic, retain) MPMusicPlayerController *ipodPlayer;
// .m
ipodPlayer = [MPMusicPlayerController iPodMusicPlayer];
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter addObserver:self selector:@selector(changedPlaybackState:) name:MPMusicPlayerControllerPlaybackStateDidChangeNotification object:ipodPlayer];
[notificationCenter addObserver:self selector:@selector(changedNowPlayingItem:) name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification object:ipodPlayer];
[ipodPlayer beginGeneratingPlaybackNotifications];
Durante l'elaborazione in background, se iPod giocatore app è terminata, la console stampe fuori:
MediaPlayer: Message playbackState timed out.
Se non va in crash (o si blocca, rallentando le prestazioni), la notifica non è inviati ai miei metodi di osservazione più. Posso ancora inviare messaggi come:
[ipodPlayer pause];
[ipodPlayer play];
[ipodPlayer skipToNextItem];
[ipodPlayer skipToPreviousItem];
ma non posso ricevere alcuna notifica
Le mie domande sono:
- è che ci sono modo per riassegnare, ricaricare puntatori durante il runtime? Come posso ripristinare la proprietà come proprio come quando è stata lanciata per la prima volta?
- Come posso catturare il messaggio: "MediaPlayer: Message playbackState scaduto." nell'output della console? Non è come usare NSLog.
Grazie per avermi aiutato.
AGGIORNATO: Sembra utilizzando assign
o weak
per la proprietà ipodPlayer è stata la soluzione. Inoltre, l'accesso è fatto con l'ipotesi che la proprietà potrebbe non esserci. Dopo molte prove e un anno di utilizzo effettivo nella mia app, penso che questa fosse la soluzione giusta.
Stai utilizzando iOS 5? In caso contrario, procedere nel modo seguente: self.ipodPlayer = [MPMusicPlayerController ...] Altrimenti in teoria l'istanza creata da iPodMusicPlayer viene raccolta e non è stato aumentato il conteggio ref in modo da ottenere un puntatore nullo ad un certo punto. A meno che non chiami quel metodo prima di ogni interazione con il lettore musicale, che potrebbe essere un'altra ragione per i tuoi problemi. Una istanza viene raccolta e tu non ti leghi alla nuova istanza? – hktegner
Grazie per aver commentato questo vecchio post. Avevo cambiato il mio flusso di accesso a questa proprietà ipodPlayer con la possibilità della sua assenza. Quindi, ho reso la proprietà usare 'assign' o' weak' e inizializzato con '[MPMusicPlayerController iPodMusicPlayer];' ogni volta che non è lì – petershine