如何使MPMediaQuery基于releaseDate返回结果

时间:2017-03-12 06:19:30

标签: swift3 mpmediaquery

我试图创建一个MPMediaQuery,它将按时间顺序返回结果,最好是根据查询本身升序或降序。

现在我的查询以升序计时顺序(最旧的顶部)返回项目,但我希望能够颠倒顺序。 我需要将我的结果放在MPMediaQuery中,以便我可以将它与MPMediaPlayer一起使用。

var qryPodcasts = MPMediaQuery()
var titleFilter = MPMediaPropertyPredicate()
titleFilter = MPMediaPropertyPredicate(value: "This American Life", forProperty: MPMediaItemPropertyPodcastTitle, comparisonType: .equalTo)
qryPodcasts.addFilterPredicate(titleFilter)

EDIT ::

我已经能够更接近目标但是我仍然遇到导致崩溃的问题。

我已添加此代码,该代码将根据" releaseDate"对结果查询进行排序。但并非所有的播客都符合要求,因此这个属性可能会导致崩溃:

let myItems = qryPodcasts.items?.sorted{($0.releaseDate)! > ($1.releaseDate)!}
let podCollection = MPMediaItemCollection(items: myItems!)
myMP.setQueue(with: podCollection!)

如何避免此错误以及如何在没有releaseDate的情况下处理项目?

1 个答案:

答案 0 :(得分:0)

仅适用于此部分: 如何避免此错误以及如何在没有releaseDate的情况下处理项目?

避免使用强制解包(!)并为nil提供默认值:

let myItems = qryPodcasts.items?.sorted{($0.releaseDate ?? Date.distantFuture) > ($1.releaseDate ?? Date.distantFuture)}

您最好检查代码中的所有其他强制解包,您真的100%确定那些永远不会返回nil吗?