跨会话保持iPod播放列表(MPMediaItemCollection)的最佳实践

4
当使用iPhone SDK中的应用内音频时,可以允许用户从其iPod库中选择列表并创建应用内本地播放列表。如果我想保留此选择,很容易将数据序列化并写入文件,然后进行恢复。
然而,仅仅像这样做会让我觉得可能会出现问题。例如,如果用户同步并删除了声音怎么办?我可以在设置时间遍历它们并查询iPod数据库,但对于列表可能有5万个项目,这可能需要一些时间。
其他人是如何做到这一点的,还有哪些我没有考虑到的注意事项?

为什么有人想在应用程序中拥有如此庞大的播放列表呢?就我个人而言(作为用户),我更喜欢使用iPod应用程序来管理我的播放列表,我只想访问播放器控件和当前播放列表的可视化。如果我在我的GPS跟踪应用程序中有一个播放列表,它可能会非常短(<100)。 - Johannes Rudolph
MPMediaPickerController返回一个集合。集合中的项目数量可能是整个库。 - falconcreek
我同意,它很可能非常简短。但我需要覆盖所有情况。如果用户被允许从iPod应用程序中选择预设播放列表,那么它可能是“所有歌曲”播放列表。我需要考虑到这种潜在的选择。 - coneybeare
我之所以建议使用 representativeItem 来构建查询,是因为理论上如果选择了“所有歌曲”播放列表,则查询将返回“所有歌曲”。你只需要处理查询未返回结果的情况。 - falconcreek
2个回答

3

我会懒惰地做它,

如果用户想要播放一首歌曲,你可以查询iPod数据库,特别是那首歌曲和整张专辑。这将在每次播放歌曲之前需要两个请求到数据库,但你可以评估它的速度是否足够快等等。

你还可以在某个地方放置一个“同步”选项,与iPod数据库同步应用程序,但是给用户选择,告诉用户可能需要一段时间,甚至为他的特定库大小提供时间估计的“警告”。

我认为从可用性和节省电池的角度来看,这比每次启动应用程序或后台查询整个数据库更好。


2

我最初发布了有关保存单个MPMediaItems的响应。经过一些思考和重新阅读MPMediaPickerControllerDelegate的文档,我认为使用的方法是保存MPMediaItemCollectionrepresentiveItem属性,并在运行时使用它来构建MPMediaQuery


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接