URL к MPMediaItem - PullRequest
       30

URL к MPMediaItem

6 голосов
/ 27 марта 2012

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

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

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

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

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

Ответы [ 2 ]

6 голосов
/ 27 марта 2012

Сохранение:

    NSNumber* persistentID = 
[mediaItem valueForProperty:MPMediaItemPropertyPersistentID];

Загрузка:

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

Другой пример: NSNumber для MPMediaItemPropertyPersistentID для NSString и обратно

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

4 голосов
/ 19 октября 2013

Кроме того, противный хак, который работает для меня (тм).

- (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».

...