致命错误。数组索引超出索引路径范围 - swift

时间:2016-03-21 07:49:30

标签: ios swift

我的以下代码是搜索控制器的一部分。它运行没有问题但是在8-10次搜索之后,我在下一行遇到致命错误(线程1:EXC_BAD_INSTRUCTION):

let movie = filteredMovies[indexPath.item]

你能否告诉解决这类问题的方法。

extension searchResults: UITableViewDataSource, UITableViewDelegate {

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {


    let cell = tableView.dequeueReusableCellWithIdentifier("searchCell", forIndexPath: indexPath) as! searchResultCell

    let movie = filteredMovies[indexPath.item]
    cell.searchLabel.text = movie.title

    let fileUrl = NSURL(string: movie.thumb)!

    if let data = NSData(contentsOfURL: fileUrl)
    {
        cell.searchImage.contentMode = UIViewContentMode.ScaleAspectFit
        cell.searchImage.image = UIImage(data: data)


        //  to make images rounded
        cell.searchImage.backgroundColor = UIColor.clearColor()
        cell.searchImage.layer.cornerRadius = 15.0
        cell.searchImage.clipsToBounds = true

        cell.backgroundColor = UIColor.clearColor()

    }

    return cell
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int

{

  return filteredMovies.count

}

}

1 个答案:

答案 0 :(得分:0)

您可以检查indexPath.item是否在数组filteredMovies的范围内:

if (indexPath.item >= 0 || indexPath.item < movie.count) {

    // now you can safely use filteredMovies[indexPath.item]

} else {
    // print something so you can investigate
}

如果您想知道为什么indexPath.item可能超出filteredMovies的范围,那么您必须调查其他编程逻辑(可能会删除filteredMovies中的某些元素加载tableView后)。

毕竟,当你怀疑或想要确保它永远不会导致崩溃时,总是检查边界是一件好事(容错概念)。