You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS技术问题:首次调用[MPMediaQuery playlistsQuery] collections如何移除Playback History

解决首次授权媒体库后MPMediaQuery返回"Playback History"的问题

这个问题我做音乐类应用时也踩过坑——首次授权媒体库后调用[[MPMediaQuery playlistsQuery] collections],确实会多出来一个"Playback History"条目,重启后就自动消失了。本质是系统首次授权后媒体库的缓存还没完全同步,导致查询返回了这个特殊的系统历史列表。要在首次运行就移除它,有两种稳妥的方案:

方案一:通过系统枚举值提前过滤(推荐)

从iOS 9开始,系统为特殊播放列表提供了MPMediaPlaylistType枚举,其中MPMediaPlaylistTypeHistory正好对应"Playback History"。我们可以给查询添加谓词,提前排除这个类型的播放列表,不用手动遍历:

MPMediaQuery *playlistsQuery = [MPMediaQuery playlistsQuery];

// 添加过滤谓词,排除历史播放列表
MPMediaPropertyPredicate *historyExcludePredicate = [MPMediaPropertyPredicate predicateWithValue:@(MPMediaPlaylistTypeHistory)
                                                                               forProperty:MPMediaPlaylistPropertyPlaylistType
                                                                            comparisonType:MPMediaPredicateComparisonNotEqualTo];
[playlistsQuery addFilterPredicate:historyExcludePredicate];

// 此时获取的collections已经移除了Playback History
NSArray *filteredPlaylists = playlistsQuery.collections;

这个方法的优势是不受多语言影响(不用硬编码标题),而且是系统层面的过滤,性能更优。

方案二:遍历集合过滤标题(兼容旧版本)

如果你的应用需要兼容iOS 9以下的系统,可以通过遍历播放列表,排除标题为"Playback History"的条目。注意要处理多语言场景,比如获取本地化的系统字符串:

MPMediaQuery *playlistsQuery = [MPMediaQuery playlistsQuery];
NSArray *originalCollections = playlistsQuery.collections;

NSMutableArray *filteredCollections = [NSMutableArray arrayWithCapacity:originalCollections.count];
for (MPMediaPlaylist *playlist in originalCollections) {
    // 处理多语言:获取系统本地化的"Playback History"字符串
    NSString *historyTitle = NSLocalizedString(@"Playback History", @"系统播放历史列表标题");
    if (![playlist.name isEqualToString:historyTitle]) {
        [filteredCollections addObject:playlist];
    }
}

// filteredCollections就是移除了目标条目的结果

这种方式需要注意不同语言环境下的标题翻译,建议用系统本地化字符串而不是硬编码英文。


内容的提问来源于stack exchange,提问作者vasile tancu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:59:05