2010-08-26 6 views
10

Estoy desarrollando una aplicación para iPhone que usa la biblioteca del iPod para reproducir algunas canciones. Cargué las canciones con el código a continuación. El problema es que cuando se ejecuta este código justo después de sincronizar el dispositivo con iTunes, hay un problema. Aparentemente, la biblioteca del iPod necesita ser actualizada, y lleva algo de tiempo. Si voy a la aplicación iPod justo después de una sincronización, veo un mensaje que dice "Actualizando Biblioteca ...". Si llamo "[elementos de consulta]" desde mi aplicación mientras eso sucede, obtengo una matriz vacía que indica que no hay canciones en la biblioteca. Todo funciona perfecto cuando la actualización termina. ¿Hay alguna manera de resolver este problema? Tal vez una forma de detectar cuando la actualización ha terminado. Intenté escuchar todas las NSNotifications, pero no se invocó ninguna cuando finalizó la actualización.Cargar canciones desde la biblioteca del iPod inmediatamente después de la sincronización

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]; 
} 

Espero que alguien pueda ayudar.

Peter

Respuesta

11

he descubierto que en realidad es una manera de ver cuando se complete la actualización. El dispositivo publicará una notificación cuando la actualización termine.

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

El único problema es que no puedo encontrar una manera de determinar si el dispositivo está actualizando la biblioteca de iPod y debería esperar a que termine o el dispositivo simplemente doesnt tiene ninguna canción en la biblioteca. [elementos de consulta] devolverá una matriz vacía en ambos casos.

+0

En este momento tengo el mismo problema, ¿lo resolvió de todos modos? – shw

4

@Peter tiene razón, y de hecho encontré una solución para su problema. Al principio encontré que MPMediaPickerController devuelve nil cuando se asignó e inició durante la sincronización; al principio pensé que funcionaría para verificar si hay acceso a la biblioteca pero a veces no funciona. La única forma que ahora encuentro es marcar lastModificationDate de MPMediaLibrary - mientras cambie no obtendrá resultados usando MPMediaQuery - retrase sus cambios a un momento en que esa propiedad deje de cambiar (de cualquier manera que desee) y debe estar bien. Ya envié un informe de error al respecto: la documentación dice que debe volver a cargar los objetos en caché de la biblioteca cuando se activa la notificación, pero es evidente que no puede hacerlo si MPMediaQuery devuelve nil por cada objeto que intente encontrar.

+0

Has copiado la respuesta de la publicación de alguien. –

+0

Puede ser desde este enlace http://www.wwml.tech/questions/192391/load-songs-from-ipod-library-right-after-sync –

Cuestiones relacionadas