Come posso cercare nella Libreria iPod nello stesso modo dell'applicazione iOS Music? Voglio fare domande generali che restituiscono risultati per ogni artista, album e canzone. Ad esempio, se cerco Kenny Chesney, desidero che la query dei brani restituisca tutte le canzoni di Kenny Chesney (e tutti i titoli di canzoni o gli album che contengono Kenny Chesney). Quando faccio questa query e un predicato per ogni proprietà (titolo del brano, album titolo, nome dell'artista), restituisce un array vuoto.MPMediaQuery cerca Artisti, Album e Canzoni
Ecco un po 'di codice che può dare una migliore idea di quello che sto cercando di realizzare:
MPMediaPropertyPredicate *songPredicate =
[MPMediaPropertyPredicate predicateWithValue:searchText
forProperty:MPMediaItemPropertyTitle
comparisonType:MPMediaPredicateComparisonContains];
MPMediaPropertyPredicate *albumPredicate =
[MPMediaPropertyPredicate predicateWithValue:searchText
forProperty:MPMediaItemPropertyAlbumTitle
comparisonType:MPMediaPredicateComparisonContains];
MPMediaPropertyPredicate *artistPredicate =
[MPMediaPropertyPredicate predicateWithValue:searchText
forProperty:MPMediaItemPropertyArtist
comparisonType:MPMediaPredicateComparisonContains];
MPMediaQuery *songsQuery = [MPMediaQuery songsQuery];
[songsQuery addFilterPredicate:songNamePredicate];
[songsQuery addFilterPredicate:artistNamePredicate];
[songsQuery addFilterPredicate:albumNamePredicate];
NSLog(@"%@", [songsQuery items]);
Ho questo lavoro eseguendo la query con ogni predicato separatamente, ma questo sembra molto inefficiente!
solo menzionare che se si fanno 3 query separatamente si può finire con oggetti duplicati. per esempio. se l'album è chiamato come artista, ecc. –
@relikd Sì, questo è dove sono.Ho tre query diverse che aggiungo a tre array - ma ci sono duplicati - che è ovviamente un problema. – daidai
è possibile controllare prima di unirli con 'if ([arr indexOfObject: song] == NSNotFound) {[arr addObject: song]; } '. Ma questo non è molto efficiente, specialmente su array di grandi dimensioni. Questo perché 'indexOfObject:' invia un messaggio 'isEqual:' a TUTTI gli articoli prima di aggiungerne uno nuovo. –