2010-11-10 14 views
2

Hi Stack Overflowers, j'espère que vous pourrez m'aider.Comment puis-je obtenir toutes les chansons de la bibliothèque de musique iPhone d'une année spécifique?

Je suis en train de faire une collection de toutes les chansons dans un utilisateur iPhone bibliothèque musicale d'une année donnée i.e. 2002.

Je cherche alors à jouer les chansons à travers un MPMusicPlayerController.

Il semble que vous ne puissiez pas configurer MPMediaPropertyPredicate pour filtrer par date de publication, ce qui, à mon avis, l'exclut. Ce que je ne veux pas vraiment faire est d'avoir un tableau complet de toutes les dates de sortie des pistes, puis d'itérer tous les NSDates car je pense (peut-être à tort) que cela pourrait être assez lent pour les grandes bibliothèques.

Quelle est la meilleure façon d'accomplir cette tâche?

Merci d'avance.

Répondre

5

Voici ce que vous recherchez.

allMedia = [MPMediaQuery songsQuery]; 
//MPMediaPropertyPredicate *mpp1 = [MPMediaPropertyPredicate predicateWithValue:@"2" forProperty:MPMediaItemPropertyRating comparisonType:MPMediaPredicateComparisonEqualTo]; 
//MPMediaPropertyPredicate *mpp2 = [MPMediaPropertyPredicate predicateWithValue:@"Pop" forProperty:MPMediaItemPropertyGenre comparisonType:MPMediaPredicateComparisonContains]; 
//[allMedia addFilterPredicate:mpp1]; 
//[allMedia addFilterPredicate:mpp2]; 

//[myPlayer setQueueWithQuery:allMedia]; 


NSArray *itemsFromGenericQuery = [allMedia items]; 

NSMutableArray *mArray = [[NSMutableArray alloc] init]; 
int i = 0; 
int j=0; 

NSLog(@"itemCount: %d",[itemsFromGenericQuery count]); 

float playsQuery = sliderPlays.value; 
if(playsQuery == 20){playsQuery = 10000;} 

NSLog(@"sliderRating.value %f sliderPlays.value %.1f", [sliderRating value], playsQuery); 

while(i++ < 1000){ 
    int trackNumber = arc4random() % [itemsFromGenericQuery count]; 
    MPMediaItem *song = [itemsFromGenericQuery objectAtIndex:trackNumber]; 

    NSString *artistName = [song valueForProperty: MPMediaItemPropertyArtist]; 
    NSString *title = [song valueForProperty: MPMediaItemPropertyTitle]; 
    NSString *rating = [song valueForKey:MPMediaItemPropertyRating]; 
    double length = [[song valueForProperty:MPMediaItemPropertyPlaybackDuration] doubleValue]; 
    NSNumber *year = [song valueForProperty:MPMediaItemPropertyYear]; 



    if ([year intValue] >= [def intValue] <= { 
     if(j++ > 50){break;} 
     NSLog (@"tracknumber: %d j: %d artistName: %@ title: %@ length: %@ year: %@ playcount: %d",trackNumber, j, artistName, title, length, rating, [playCount intValue]);    
     [mArray addObject:song];    
    } 

    if(i++ > 1000)break; 
} 


MPMediaItemCollection *itemCol = [[MPMediaItemCollection alloc] initWithItems:mArray]; 


[myPlayer setQueueWithItemCollection:itemCol]; 


[myPlayer setShuffleMode: MPMusicShuffleModeSongs]; 
[myPlayer setRepeatMode: MPMusicRepeatModeNone]; 
+1

est MPMediaItemPropertyYear même une propriété valide? ça n'existe pas pour moi quand j'essaie de compiler. – roocell

+0

[articles allMedia] retournent toujours à zéro –