2010-08-26 23 views
10

Sto sviluppando un'applicazione per iPhone che utilizza la libreria di iPod per riprodurre alcuni brani. Carico le canzoni con il codice qui sotto. Il problema è che quando si esegue questo codice subito dopo che il dispositivo è stato sincronizzato con iTunes, c'è un problema. Apparentemente la libreria dell'iPod deve essere aggiornata, e ci vuole del tempo. Se vado all'applicazione iPod subito dopo una sincronizzazione, ho visualizzato un messaggio che dice "Aggiornamento della libreria ..". Se chiamo "[query items]" dalla mia applicazione mentre ciò accade, ottengo un array vuoto che indica che non ci sono brani nella libreria. Tutto funziona alla perfezione quando l'aggiornamento è finito. C'è un modo per risolvere questo problema? Forse un modo per rilevare quando l'aggiornamento è finito. Ho provato ad ascoltare a NSNotifications, ma nessuno è stato chiamato quando l'aggiornamento è terminato.Carica brani da iPod Library subito dopo la sincronizzazione

MPMediaQuery *query = [MPMediaQuery songsQuery]; 

// convert all items to abstracted media item 
NSArray *items = [query items]; 

NSMutableArray *convertedItems = [[NSMutableArray alloc] initWithCapacity:[items count]]; 
for (MPMediaItem *item in items) { 
    REMediaItem *mediaItem = [[REMediaItem alloc] initWithMediaItem:item]; 
    [convertedItems addObject:mediaItem]; 
    [mediaItem release]; 
} 

Spero che qualcuno possa aiutare.

Peter

risposta

11

ho scoperto che in realtà non c'è un modo per vedere se l'aggiornamento è completo. Il dispositivo invierà una notifica al termine dell'aggiornamento.

[[MPMediaLibrary defaultMediaLibrary] beginGeneratingLibraryChangeNotifications] 
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 
[notificationCenter addObserver:self 
         selector:@selector(iPodLibraryDidChange) 
          name: MPMediaLibraryDidChangeNotification 
         object:nil]; 

L'unico problema è che non riesco a trovare un modo per determinare se il dispositivo sta aggiornando la libreria iPod e devo aspettare che finisca o il dispositivo semplicemente doesnt hanno alcun brani nella libreria. [query items] restituirà un array vuoto in entrambi i casi.

+0

In questo momento ho lo stesso problema - l'hai risolto comunque? – shw

4

@Peter ha ragione, e in realtà ho trovato una soluzione per il suo problema. Inizialmente ho trovato che MPMediaPickerController restituisce nil quando allocati e avviati durante la sincronizzazione - inizialmente pensavo che avrebbe funzionato per verificare se c'è un accesso alla libreria ma a volte non funziona. L'unico modo per cui ho trovato è di controllare lastModificationDate di MPMediaLibrary - finché cambia non si ottengono risultati utilizzando MPMediaQuery - si ritardano le modifiche in un momento in cui tale proprietà smette di cambiare (in qualsiasi modo che si desidera) e si dovrebbe Stammi bene. Già inviato un bug report su questo - la documentazione dice che dovresti ricaricare i tuoi oggetti memorizzati nella cache quando la notifica si attiva ma chiaramente non puoi farlo se MPMediaQuery restituisce nil per ogni oggetto che cerchi di trovare.

+0

Hai copiato la risposta dal post di qualcuno. –

+0

Potrebbe essere da questo link http://www.wwml.tech/questions/192391/load-songs-from-ipod-library-right-after-sync –

Problemi correlati