2016-03-28 11 views
-1

Son çıkan şarkıları bir tableView ile doldurmak istiyorum. .nowPlayingItem ile en son şarkıyı alabilirim, ama daha önce duyduğum şarkıları nasıl alabilirim?Son şarkıları (Swift)

Bu sorunun zaten Retrieve list of songs ordered by last play time in iOS numaralı yanıtı olduğunu düşünüyorum, ancak Objective-C'de ve bunu çeviremiyorum. Ya da Swift'de bunu yapmak için daha iyi bir yol var mı?

Bu Swift de bunu nasıl olduğunu

cevap

2

Böyle bir şey yapabileceğini:

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) 

sonuç

+0

Başlık gibi bir şey elde etmek için, 'sortResults [i] .title' – wottle

+0

büyük, hangi tür döngü elde etmek için bir döngü kullanabilirsiniz? –

+0

Eh, bunu bir tablo görünümünde yaptığınız için, görünüm yüklendiğinde (veya cellForRowAtIndexPath'ın dışında bir yerde) şarkı listesi almalısınız. Daha sonra, cellForRowAtIndexPath belgesinde, hücre etiketini 'sortResults [indexPath.row] .title 'olarak ayarlamanız gerekir. Eğer bir' UITableView' uygulamasına yardım etmeye ihtiyacınız varsa, bunu çok geniş olduğundan yeni bir soruya taşımanızı tavsiye ederim. buraya eklemek için – wottle

2

,

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 
    } 
} 
+0

teşekkür ederiz sortedResults dizide saklanan olurdu! TableView hücreleriyle nasıl doldurabilirim? Çünkü sıralanmışArray'ın .title veya .artist –

+0

gibi bir üyesi yoktur. Büyük bir mdeia kitaplığı için, NSSortDescriptor'unun daha hızlı olacağını düşünürdüm. Onaylayamıyorum çünkü cihazımda yalnızca iki şarkı var. Benimki gibi küçük bir kütüphane için, seninki daha hızlı. – wottle