我的以下代码是搜索控制器的一部分。它运行没有问题但是在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
}
}
答案 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后)。
毕竟,当你怀疑或想要确保它永远不会导致崩溃时,总是检查边界是一件好事(容错概念)。