我想在我的图书馆中播放25首歌曲。这是我的代码:
var allSongsArray: [MPMediaItem] = []
let songsQuery = MPMediaQuery.songsQuery()
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 25 //allSongsArray.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell")
let items = allSongsArray[indexPath.row]
cell?.textLabel?.text = items.title
cell?.detailTextLabel?.text = items.artist
cell?.imageView?.image = items.artwork?.imageWithSize(imageSize)
return cell!
}
当我运行它时,它会崩溃,因为:
致命错误:索引超出范围
我尝试将numberOfRowsInSection
更改为allSongsArray.count
,但最终会出现同样的错误。
答案 0 :(得分:14)
您应该返回allSongsArray.count
并且为了避免返回空单元格,请在填写yourTableView.reloadData
后使用allSongsArray
。
答案 1 :(得分:3)
首次创建数组时,它是空的。因此,它会让你出错。
尝试返回歌曲数组的计数。
首先,您需要将数据放入数组,然后更新表视图。
以下是示例代码:
@IBAction private func refresh(sender: UIRefreshControl?) {
if myArray.count > 0 {
self.tableView.reloadData()
sender?.endRefreshing()
} else {
sender?.endRefreshing()
}
}
答案 2 :(得分:1)
请返回实际的数组计数而不是静态
return allsongsarray.count
答案 3 :(得分:1)
以防您的应用崩溃
let items = allSongsArray[indexPath.row]
当您检查allSongsArray.count时,您可以通过确保[indexPath.row]不超过您的数组数来保护它。所以你可以写一个简单的if条件;
if allSongsArray.count > 0 && indexPath.row < allSongsArray.count {
//Do the needful
}