6

У меня есть простой вопрос, но я не могу найти правильный ответ. У меня есть URL-адрес песни, сохраненный в моей базе данных. Путь Вот так.URL to MPMediaItem

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

Как обратившись обратно в объект MPMediaItem, у которого есть имя исполнителя и произведение искусства?

Возможно ли это?

Спасибо ответы.

ответ

4

Saving:

NSNumber* persistentID = 
[mediaItem valueForProperty:MPMediaItemPropertyPersistentID]; 

Загрузка:

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

Другой пример: NSNumber for MPMediaItemPropertyPersistentID to NSString and back again

Примечание песни URL, которые являются ненадежными, потому что любая DRM песня возвращает пустой URL

+0

благодарит за помощь, это работает :) – flatronka

+0

Как передать элемент мультимедиа с хоста на клиентскую сторону, используя мультипликаторную связь? –

3

В качестве альтернативы , неприятный взлом, который работает Для 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]; 
} 

Комментарии оценили, где это может пойти не так или как улучшить его. Я предпочитаю передавать URL-адрес вместо PersistentID, поскольку у меня есть несколько источников мультимедиа, все из которых могут использовать URL-адреса. Использование PersistentID будет означать много «если это идентификатор носителя, сделайте это, в противном случае сделайте это с помощью URL».

+0

Он отлично работает и не занимает много времени, чтобы создать mpmediaitem Спасибо. +1 для вас. :) – Tendulkar