致命错误:索引超出范围

时间:2016-03-28 10:35:09

标签: ios swift uitableview

我想在我的图书馆中播放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,但最终会出现同样的错误。

4 个答案:

答案 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

}