2012-03-27 13 views
6

Tengo una pregunta simple pero no puedo encontrar una respuesta correcta. Tengo una url de canción guardada en mi base de datos. Un camino como este.URL a MPMediaItem

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

Cómo convertir de nuevo a un objeto MPMediaItem que tiene nombre de artista y obras de arte?

¿Es posible?

Gracias las respuestas.

Respuesta

4

Ahorro:

NSNumber* persistentID = 
[mediaItem valueForProperty:MPMediaItemPropertyPersistentID]; 

Carga:

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

Otro ejemplo: NSNumber for MPMediaItemPropertyPersistentID to NSString and back again

URL Nota canción se no son fiables, ya que cualquier canción DRM devuelve una URL nula

+0

gracias su ayuda, funciona :) – flatronka

+0

¿Cómo se pasa el elemento de medios desde el host al lado del cliente usando la conectividad del multiplicador? –

3

Alternativamente , un truco desagradable que funciona Para mí (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]; 
} 

Comentarios apreciados por donde esto podría salir mal o la forma de mejorarlo. Prefiero pasar la URL en lugar de PersistentID ya que tengo varias fuentes de medios, todas las cuales pueden usar URL. Usar PersistentID significaría mucho "si esto es una identificación de medios, haz esto, de lo contrario, hazlo con la URL".

+0

Funciona bien y no toma mucho tiempo crear el mpmediaitem Gracias. +1 para ti. :) – Tendulkar