我需要按顺序从iOS设备获取 N 最近播放的歌曲列表。
目前我能想象的唯一方法是将所有歌曲通过MPMediaQuery
并按lastPlayedDate
手动排序。
这是一项潜在的昂贵操作,我想知道是否有更好的方法。
编辑:经过一些测试,这是一项非常昂贵的操作。在2500首歌曲的测试库中,花了大约20秒来:
任何有关改进的建议都将受到赞赏。
编辑2:现在已解决,但仅仅是为了记录这里我正在做的事情。
我正在使用此处所述的块进行排序:https://stackoverflow.com/a/805589/112702。简单地将排序方法改为布莱恩的答案,在iPod Touch 3上将我的速度提高了近20倍。
答案 0 :(得分:8)
一种方法是从MPMediaItem
获取MPMediaQuery
的数组,并使用MPMediaItemPropertyLastPlayedDate
按NSSortDescriptor
对其进行排序:
NSTimeInterval start = [[NSDate date] timeIntervalSince1970];
MPMediaQuery *songsQuery = [MPMediaQuery songsQuery];
NSArray *songsArray = [songsQuery items];
NSSortDescriptor *sorter = [NSSortDescriptor sortDescriptorWithKey:MPMediaItemPropertyLastPlayedDate
ascending:NO];
NSArray *sortedSongsArray = [songsArray sortedArrayUsingDescriptors:@[sorter]];
NSTimeInterval finish = [[NSDate date] timeIntervalSince1970];
NSLog(@"Execution took %f seconds.", finish - start);
这是按照最近播放的新阵列进行排序。我使用2000首歌曲在iPhone 4S上进行了测试,花了0.98秒。
答案 1 :(得分:0)
我认为MPMediaQuery
是目前最近从iOS设备播放歌曲的唯一途径。
您可以使用属性MPMediaItemPropertyLastPlayedDate
,它会返回用户播放媒体项目的最新日历日期和时间。值是NSDate
对象。