Il costruttore di convenienza artistsQuery
non esegue l'ordinamento e di gruppo per album. artistsQuery
restituisce un array di raccolte di elementi multimediali di tutti gli artisti in ordine alfabetico per nome dell'artista. Nested all'interno di ogni collezione di artisti è una serie di elementi multimediali associati a tutti i brani per quell'artista. L'array nidificato è ordinato alfabeticamente in base al titolo del brano.
Un modo per tenere un conteggio degli album per artista è quello di elencare tutti gli elementi dei brani per ogni raccolta di artisti e utilizzare uno NSMutableSet
per tenere traccia dei titoli degli album distinti associati a ciascun brano. Quindi aggiungi il conteggio del set come valore per ogni codice dell'artista in un NSMutableDictionary
. Eventuali titoli di album duplicati non verranno aggiunti dal momento che un NSMutableSet
avrà solo oggetti distinti:
MPMediaQuery *artistQuery = [MPMediaQuery artistsQuery];
NSArray *songsByArtist = [artistQuery collections];
NSMutableDictionary *artistDictionary = [NSMutableDictionary dictionary];
NSMutableSet *tempSet = [NSMutableSet set];
[songsByArtist enumerateObjectsUsingBlock:^(MPMediaItemCollection *artistCollection, NSUInteger idx, BOOL *stop) {
NSString *artistName = [[artistCollection representativeItem] valueForProperty:MPMediaItemPropertyArtist];
[[artistCollection items] enumerateObjectsUsingBlock:^(MPMediaItem *songItem, NSUInteger idx, BOOL *stop) {
NSString *albumName = [songItem valueForProperty:MPMediaItemPropertyAlbumTitle];
[tempSet addObject:albumName];
}];
[artistDictionary setValue:[NSNumber numberWithUnsignedInteger:[tempSet count]]
forKey:artistName];
[tempSet removeAllObjects];
}];
NSLog(@"Artist Album Count Dictionary: %@", artistDictionary);
Sarebbe più pulito se si modifica la query per albumsQuery
. Questa query raggruppa e ordina la raccolta in base al nome dell'album. Quindi si tratta solo di elencare l'array di raccolte di album e di tenere un conteggio del nome dell'artista rappresentativo per ciascun album in uno NSCountedSet
. Il set contato seguirà sono inseriti il numero di volte in cui oggetti:
MPMediaQuery *albumQuery = [MPMediaQuery albumsQuery];
NSArray *albumCollection = [albumQuery collections];
NSCountedSet *artistAlbumCounter = [NSCountedSet set];
[albumCollection enumerateObjectsUsingBlock:^(MPMediaItemCollection *album, NSUInteger idx, BOOL *stop) {
NSString *artistName = [[album representativeItem] valueForProperty:MPMediaItemPropertyArtist];
[artistAlbumCounter addObject:artistName];
}];
NSLog(@"Artist Album Counted Set: %@", artistAlbumCounter);
È inoltre possibile recuperare il conteggio per un oggetto in un NSCountedSet
con il metodo countForObject:
.
fonte
2012-06-14 00:22:52
Funziona perfettamente !! Grazie mille !! – Jonathan