Swift:如何获取个人媒体库流派的实际名称?
嘿,我之前也踩过这个坑!直接打印MPConcreteMediaItemCollection实例时,系统只会输出它的类名加内存地址(就是那个讨厌的十六进制后缀),完全不是我们要的流派名称。别慌,解决起来很简单,给你梳理清楚:
如何获取实际的流派名称
核心逻辑是:每个MPConcreteMediaItemCollection对应一个流派分组,你需要从这个集合中提取它的MPMediaPropertyGenre属性值——这才是我们要的流派名称。
具体代码实现(Swift版)
假设你已经通过媒体查询拿到了流派集合数组:
let genreQuery = MPMediaQuery.genres() guard let genreCollections = genreQuery.collections else { print("未获取到流派数据") return }
接下来遍历集合,提取名称:
for genreCollection in genreCollections { // 提取流派名称属性 if let genreName = genreCollection.value(forProperty: MPMediaPropertyGenre) as? String { print("流派:\(genreName)") } else { print("无法识别的流派") } }
如果是Objective-C版本
代码逻辑是一样的,写法稍有不同:
MPMediaQuery *genreQuery = [MPMediaQuery genresQuery]; NSArray *genreCollections = genreQuery.collections; for (MPConcreteMediaItemCollection *collection in genreCollections) { NSString *genreName = [collection valueForProperty:MPMediaPropertyGenre]; if (genreName) { NSLog(@"流派:%@", genreName); } else { NSLog(@"无法识别的流派"); } }
为什么这能行?
MPMediaItemCollection的value(forProperty:)(Objective-C是valueForProperty:)方法可以获取该集合对应的元数据属性,MPMediaPropertyGenre是苹果提供的专门用于获取流派名称的属性键,把返回值转成字符串类型,就能得到我们需要的实际流派名称了。
内容的提问来源于stack exchange,提问作者Jordan Heath
相关产品推荐
相关产品推荐

