如何根据发布日期将 MPMediaQuery 生成 return 结果
How to make an MPMediaQuery to return results based on releaseDate
我正在尝试创建一个 MPMediaQuery,它将 return 结果按时间顺序排列,最好根据查询本身升序或降序。
现在我的查询 returns 项按时间升序排列(最早的在顶部),但我希望能够颠倒顺序。
我需要我的结果在 MPMediaQuery 中,以便我可以将它与 MPMediaPlayer 一起使用。
var qryPodcasts = MPMediaQuery()
var titleFilter = MPMediaPropertyPredicate()
titleFilter = MPMediaPropertyPredicate(value: "This American Life", forProperty: MPMediaItemPropertyPodcastTitle, comparisonType: .equalTo)
qryPodcasts.addFilterPredicate(titleFilter)
编辑::
我离目标又近了一步,但是我仍然遇到导致崩溃的问题。
我添加了这段代码,它将根据 "releaseDate" 对结果查询进行排序,但并非所有 Podcast 都符合要求,因此 属性 可能为 nil,从而导致崩溃:
let myItems = qryPodcasts.items?.sorted{([=12=].releaseDate)! > (.releaseDate)!}
let podCollection = MPMediaItemCollection(items: myItems!)
myMP.setQueue(with: podCollection!)
如何避免此错误以及如何处理没有发布日期的项目?
仅此部分:
如何避免此错误以及如何处理没有发布日期的项目?
避免使用强制展开 (!
) 并为 nil
:
提供默认值
let myItems = qryPodcasts.items?.sorted{([=10=].releaseDate ?? Date.distantFuture) > (.releaseDate ?? Date.distantFuture)}
您最好检查代码中的所有其他强制解包,您真的 100% 确定那些永远不会 return nil
?
我正在尝试创建一个 MPMediaQuery,它将 return 结果按时间顺序排列,最好根据查询本身升序或降序。
现在我的查询 returns 项按时间升序排列(最早的在顶部),但我希望能够颠倒顺序。 我需要我的结果在 MPMediaQuery 中,以便我可以将它与 MPMediaPlayer 一起使用。
var qryPodcasts = MPMediaQuery()
var titleFilter = MPMediaPropertyPredicate()
titleFilter = MPMediaPropertyPredicate(value: "This American Life", forProperty: MPMediaItemPropertyPodcastTitle, comparisonType: .equalTo)
qryPodcasts.addFilterPredicate(titleFilter)
编辑::
我离目标又近了一步,但是我仍然遇到导致崩溃的问题。
我添加了这段代码,它将根据 "releaseDate" 对结果查询进行排序,但并非所有 Podcast 都符合要求,因此 属性 可能为 nil,从而导致崩溃:
let myItems = qryPodcasts.items?.sorted{([=12=].releaseDate)! > (.releaseDate)!}
let podCollection = MPMediaItemCollection(items: myItems!)
myMP.setQueue(with: podCollection!)
如何避免此错误以及如何处理没有发布日期的项目?
仅此部分: 如何避免此错误以及如何处理没有发布日期的项目?
避免使用强制展开 (!
) 并为 nil
:
let myItems = qryPodcasts.items?.sorted{([=10=].releaseDate ?? Date.distantFuture) > (.releaseDate ?? Date.distantFuture)}
您最好检查代码中的所有其他强制解包,您真的 100% 确定那些永远不会 return nil
?