Search code examples
iosswiftmpmediaitemmpmediaquery

Last heard songs (Swift)


I want to fill a tableView with the last heard songs. With .nowPlayingItem I can get the very last song, but how can I get the songs heard before?

I think this question already has an answer at Retrieve list of songs ordered by last play time in iOS, but it is in Objective-C and I´m not able to translate it. Or is there an even better way to do it in Swift instead?


Solution

  • You could do something like this:

        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)
    

    The results would be stored in the sortedResults array