2012-03-27 15 views
6

Ho una domanda semplice ma non riesco a trovare una risposta giusta. Ho un URL di canzone salvato nel mio database. Un percorso come questo.URL a MPMediaItem

aSound.path = [[item valueForProperty: MPMediaItemPropertyAssetURL] absoluteString]; 

Come riconvertire in un oggetto MPMediaItem che ha il nome del brano artista e grafica?

È possibile?

Grazie delle risposte.

risposta

4

risparmio:

NSNumber* persistentID = 
[mediaItem valueForProperty:MPMediaItemPropertyPersistentID]; 

Caricamento:

  MPMediaPropertyPredicate * predicate = 
       [MPMediaPropertyPredicate 
       predicateWithValue:persistentID 
         forProperty:MPMediaItemPropertyPersistentID]; 

Un altro esempio: NSNumber for MPMediaItemPropertyPersistentID to NSString and back again

URL Nota song sono non sono affidabili perché ogni canzone DRM restituisce un URL nullo

+0

grazie del tuo aiuto, funziona :) – flatronka

+0

Come passare l'elemento multimediale dall'host al lato client utilizzando la connettività moltiplicatore? –

3

alternativa , un brutto scherzo che funziona Per me (tm).

- (MPMediaItem *)getMediaItemForURL:(NSURL *)url { 
    // We're going to assume that the last query value in the URL is the media item's persistent ID and query off that. 

    NSString *queryString = [url query]; 
    if (queryString == nil) // shouldn't happen 
     return nil; 

    NSArray *components = [queryString componentsSeparatedByString:@"="]; 
    if ([components count] < 2) // also shouldn't happen 
     return nil; 

    id trackId = [components objectAtIndex:1]; 

    MPMediaQuery *query = [[MPMediaQuery alloc] init]; 
    [query addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:trackId forProperty:MPMediaItemPropertyPersistentID]]; 

    NSArray *items = [query items]; 

    if ([items count] < 1) // still shouldn't happen 
     return nil; 

    return [items objectAtIndex:0]; 
} 

Commenti apprezzati per dove questo potrebbe andare storto o come migliorarlo. Preferisco passare l'URL in luogo di PersistentID in quanto ho più origini multimediali, che possono utilizzare URL. Usare PersistentID significherebbe un sacco di "se questo è un ID multimediale, fallo, altrimenti, fallo con l'URL".

+0

Funziona bene e non richiede molto tempo per creare l'mpmediaitem Grazie. +1 per te. :) – Tendulkar