我有一个简单的问题,但我找不到正确的答案。我有一首歌的url保存到我的数据库中,路径如下。
aSound.path = [[item valueForProperty: MPMediaItemPropertyAssetURL] absoluteString];如何转换回具有歌曲名称、艺术家和图片的MPMediaItem对象?
有可能吗?
发布于 2012-03-27 22:14:56
保存:
NSNumber* persistentID =
[mediaItem valueForProperty:MPMediaItemPropertyPersistentID];正在加载:
MPMediaPropertyPredicate * predicate =
[MPMediaPropertyPredicate
predicateWithValue:persistentID
forProperty:MPMediaItemPropertyPersistentID];另一个例子:NSNumber for MPMediaItemPropertyPersistentID to NSString and back again
注意歌曲url是不可靠的,因为任何DRM歌曲都返回一个空url。
发布于 2013-10-19 04:11:53
或者,一个对我有效的讨厌的hack (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将意味着“如果这是一个媒体ID,请执行此操作,否则,请使用URL执行此操作”。
https://stackoverflow.com/questions/9890500
复制相似问题