2010-08-26 4 views
10

Je développe une application iPhone qui utilise la bibliothèque de l'iPod pour lire certaines chansons. Je charge les chansons avec le code ci-dessous. Le problème est que lorsque vous exécutez ce code juste après que l'appareil a été synchronisé avec iTunes, il y a un problème. Apparemment, la bibliothèque de l'iPod doit être mise à jour, et cela prend du temps. Si je vais à l'application iPod juste après une synchronisation, j'ai vu un message disant "Mise à jour de la bibliothèque ..". Si j'appelle "[éléments de requête]" de mon application pendant que cela se produit, j'obtiens un tableau vide indiquant qu'il n'y a pas de morceaux dans la bibliothèque. Tout fonctionne parfaitement lorsque la mise à jour est terminée. Y a-t-il un moyen de résoudre ce problème? Peut-être un moyen de détecter quand la mise à jour est terminée. J'ai essayé d'écouter alle NSNotifications, mais aucun n'a été appelé quand la mise à jour a fini.Charger des chansons depuis la bibliothèque de l'iPod juste après la synchronisation

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

J'espère que quelqu'un peut aider.

Peter

Répondre

11

Je découvre qu'il ya effectivement une façon de voir quand la mise à jour est terminée. L'appareil affichera une notification lorsque la mise à jour est terminée.

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

Le seul problème est que je ne peux pas trouver un moyen de l'appareil d'une durée déterminée si est mise à jour de la bibliothèque iPod et je dois attendre qu'elle se termine ou l'appareil ne marche pas simplement avoir des chansons dans la bibliothèque. [éléments de requête] retournera un tableau vide dans les deux cas.

+0

J'ai le même problème en ce moment - l'avez-vous résolu de toute façon? – shw

4

@Peter est juste - et en fait j'ai trouvé une solution de contournement pour son problème. Au début, j'ai trouvé que MPMediaPickerController renvoie nil lorsqu'il est alloué et initié lors de la synchronisation - au début, je pensais que cela fonctionnera pour vérifier s'il y a un accès à la bibliothèque, mais parfois cela ne fonctionne pas. La seule façon pour l'instant je trouve est de vérifier lastModificationDate de MPMediaLibrary - tant que ça change, vous n'obtiendrez pas de résultats en utilisant MPMediaQuery - retarder vos changements à un moment où cette propriété cesse de changer (comme vous le souhaitez) et vous devriez être bien. Vous avez déjà envoyé un rapport de bogue à ce sujet - la documentation indique que vous devriez recharger vos objets mis en cache de la bibliothèque lorsque la notification se déclenche mais vous ne pouvez pas le faire si MPMediaQuery renvoie nil pour chaque objet que vous essayez de trouver.

+0

Vous avez copié la réponse de la publication de quelqu'un. –

+0

Peut-être tirée de ce lien http://www.wwml.tech/questions/192391/load-songs-from-ipod-library-right-after-sync –

Questions connexes