6

Ich habe eine einfache Frage, aber ich kann keine richtige Antwort finden. Ich habe eine Song-URL in meiner Datenbank gespeichert. Ein Pfad wie folgt.URL zu MPMediaItem

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

Wie konvertiert man zurück zu einem MPMediaItem-Objekt mit Songname Künstler und Artwork?

Ist es möglich?

Danke die Antworten.

Antwort

4

Ersparnis:

NSNumber* persistentID = 
[mediaItem valueForProperty:MPMediaItemPropertyPersistentID]; 

Laden:

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

Ein weiteres Beispiel: NSNumber for MPMediaItemPropertyPersistentID to NSString and back again

Hinweis Song URLs sind unzuverlässig, da jeder DRM Song eine Null-URL gibt

+0

danke Ihre Hilfe, es funktioniert :) – flatronka

+0

Wie Medienelement von Host zu Client-Seite mit Multiplikator-Konnektivität übergeben? –

3

Alternativ , ein hässlicher Hack, der funktioniert Für mich (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]; 
} 

Kommentare geschätzt für, wo das schief gehen könnte oder wie man es verbessert. Ich übergebe lieber die URL anstelle der PersistentID, da ich mehrere Medienquellen habe, die alle URLs verwenden können. Die Verwendung der PersistentID würde bedeuten, "wenn dies eine Medien-ID ist, tun Sie dies, ansonsten tun Sie das mit der URL".

+0

Es funktioniert gut und braucht nicht viel Zeit, um die mpmediaitem zu erstellen Danke. +1 für dich :) – Tendulkar