即時編寫應用程序,但無法弄清楚如何將此特定的Objective-C行轉換爲swift。任何幫助都感激不盡。我已經能夠翻譯其他行很好,但這一個拋出一些異常錯誤。這是原始的Objective-C行:應用程序只顯示一個單元格(一首歌曲)而不是所有的單元格
MPMediaItem * rowItem = [songs objectAtIndex:indexPath.row];
我一個小白和已經嘗試了許多變化,包括:
變種rowItem = songs.objectAtIndex(indexPath.row)作爲MPMediaItem
和
var rowItem:MPMediaItem = songs.objectAtIndex(indexPath.row)as MPMediaItem
但我一直在這麼長時間,我看不到它應該是什麼。非常感謝!
編輯:
歌曲被定義爲:
讓songsQuery = MPMediaQuery.songsQuery()
讓歌曲= [songsQuery.items]如NSArray的
我剛接收一個exe_breakpoint錯誤。如果我使用...作爲[MPMediaItem]將MPMediaItem封裝在數組中,但我無法獲得屬性值,例如MPMediaItemPropertyTitle和MPMediaItemPropertyArtist。
更新: 通過使用for循環獲取MPMediaItemPropertyTitle和MPMediaPropertyArtist。 「歌曲」變量的定義如上所述。 @Antonio,刪除括號不起作用。這是我當前的代碼:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
// Configure the cell...
let songsQuery = MPMediaQuery.songsQuery()
let allSongsArray = [songsQuery.items] as NSArray
var singleItem: AnyObject = allSongsArray[indexPath.row]
var rowItem = singleItem as [MPMediaItem]
if rowItem.count > 0 {
cell.textLabel?.text = rowItem[0].valueForProperty(MPMediaItemPropertyTitle) as NSString
cell.detailTextLabel?.text = rowItem[0].valueForProperty(MPMediaItemPropertyArtist) as NSString
}
return cell
}
的問題,我現在是當我測試的應用程序,它僅顯示非常的第一首歌曲在我的圖書館,並像它應該不會列出每首歌曲。感謝您提供任何幫助!
更新2:
得到它用下面的代碼工作:
class SongsViewController: UITableViewController {
var allSongs : [MPMediaItem] = []
override func viewDidLoad() {
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
allSongs += MPMediaQuery.songsQuery().items as [MPMediaItem]
println(allSongs.count)
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Potentially incomplete method implementation.
// Return the number of sections.
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete method implementation.
// Return the number of rows in the section.
return allSongs.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
// Configure the cell...
var rowItem = allSongs[indexPath.row]
cell.textLabel?.text = rowItem.valueForProperty(MPMediaItemPropertyTitle) as NSString
cell.detailTextLabel?.text = rowItem.valueForProperty(MPMediaItemPropertyArtist) as NSString
return cell
}
你應該提供更多的細節 - 如何定義'songs'?你有什麼樣的錯誤?編譯或運行時?什麼是錯誤信息? – Antonio 2015-02-10 17:41:14
@Antonio感謝您的回覆,我編輯了原帖。 – air6199 2015-02-10 17:46:59
爲什麼那些方括號'[songsQuery.items]'? items屬性的數據類型是什麼? – Shoaib 2015-02-10 17:53:12