我需要获得一份清单N按顺序最近从 iOS 设备播放的歌曲。
目前我能想象的唯一方法就是将所有歌曲都通过一个MPMediaQuery
并手动对它们进行排序lastPlayedDate
.
这是一项可能昂贵的操作,我想知道是否有更好的方法。
编辑:经过一些测试,这是一个非常昂贵的操作。在包含 2500 首歌曲的测试库中,大约需要 20 秒才能:
- 获取所有歌曲。
- 为所有从未播放过的歌曲指定日期(1970 年 1 月 1 日)。
- 按日期订购。
- 取第一个N条目。
任何改进建议将不胜感激。
编辑2:现在解决了,但只是为了记录,这就是我正在做的事情。
我正在使用块进行排序,如下所述:https://stackoverflow.com/a/805589/112702。只需将排序方法更改为 Bryan 的答案中的方法,我在 iPod Touch 3 上的速度就提高了近 20 倍。
一种方法是采用数组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);
这将按照最近播放的顺序对新数组进行排序。我在 iPhone 4S 上使用 2000 首歌曲进行了测试,耗时 0.98 秒。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)