【问题标题】:Last heard songs (Swift)最后听到的歌曲(斯威夫特)
【发布时间】:2016-03-28 17:34:51
【问题描述】:

我想用最后听到的歌曲填写tableView。用.nowPlayingItem我可以得到最后一首歌,但我怎样才能得到以前听过的歌呢?

我认为这个问题在 Retrieve list of songs ordered by last play time in iOS 已经有了答案,但它是在 Objective-C 中的,我无法翻译它。或者有没有更好的方法来代替 Swift?

【问题讨论】:

    标签: ios swift mpmediaitem mpmediaquery


    【解决方案1】:

    你可以这样做:

        let startTime: NSTimeInterval = NSDate().timeIntervalSince1970
        let songsQuery: MPMediaQuery = MPMediaQuery.songsQuery()
        let songsArray: [MPMediaItem] = songsQuery.items!
        let songsNSArray : NSArray = NSArray(array: songsArray)
    
        let descriptor: NSSortDescriptor = NSSortDescriptor(key: MPMediaItemPropertyLastPlayedDate, ascending: false)
        let sortedResults: NSArray = songsNSArray.sortedArrayUsingDescriptors([descriptor])
    
    
        let finishTime: NSTimeInterval = NSDate().timeIntervalSince1970
        NSLog("Execution took %f seconds to return %i results.", finishTime - startTime, sortedResults.count)
    

    结果将存储在 sortedResults 数组中

    【讨论】:

    • 要获得类似标题的东西,您可以简单地使用循环来获得sortedResults[i].title
    • 太好了,哪种循环?
    • 好吧,因为您是在 tableview 中执行此操作,所以您应该在视图加载时(或 cellForRowAtIndexPath 之外的某个位置)获取歌曲列表。然后,在cellForRowAtIndexPath 中,您只需将单元格标签设置为sortedResults[indexPath.row].title 如果您在实施UITableView 时需要帮助,我建议您将其移至一个新问题,因为它过于宽泛,无法在此处添加。
    • 你知道为什么当我尝试sortedResults[indexPath.row].imageWithSize(imageSize) 时它会崩溃吗? @wottle
    • 您必须设置断点并查看原因。你确定所有的歌曲都有图像吗?我认为您无法直接从 MPMediaItem 对象中获取图像。我认为您需要获取该项目的 MPMediaItemArtwork 属性。
    【解决方案2】:

    这就是你在 Swift 中的做法,

    let start = NSDate().timeIntervalSince1970
    
    let songsQuery = MPMediaQuery.songsQuery()
    if let songsArray = songsQuery.items {
        let sortedArray = songsArray.sort { item1, item2 in
            if let lastPlayedDateForItem1 = item1.lastPlayedDate, 
               let lastPlayedDateForItem2 = item2.lastPlayedDate {
                return lastPlayedDateForItem1.compare(lastPlayedDateForItem2) == .OrderedDescending
            }
            return false
        }
    }
    

    【讨论】:

    • 谢谢!我怎样才能用它填充我的 tableView 单元格?因为sortedArray 没有像 .title 或 .artist 这样的成员
    • 对于大型 mdeia 库,我认为 NSSortDescriptor 会更快。我无法确认,因为我的设备上只有两首歌曲。对于像我这样的小型图书馆,您的似乎更快。
    猜你喜欢
    • 1970-01-01
    • 2017-07-22
    • 2017-03-24
    • 1970-01-01
    • 2016-08-24
    • 2016-02-08
    • 2017-11-13
    • 2015-08-19
    • 2014-09-11
    相关资源
    最近更新 更多