2016-03-21 13 views
0

私の次のコードは検索コントローラの一部です。それは問題なく動作しますが、8-10検索した後、私は致命的なエラー(スレッド1:EXC_BAD_INSTRUCTION)が発生した行を次のように:致命的なエラーです。配列のインデックスがindexpath - swiftの範囲外です。

let movie = filteredMovies[indexPath.item] 

あなたがこの種の問題を解決する方法をアドバイスしてもらえます。

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

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

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

そしてindexPath.itemfilteredMoviesの範囲外であるかもしれないなぜあなたは不思議に思うならば、それは他のだ:indexPath.itemが配列filteredMoviesの境界内にあるかどうかをチェックすることができます

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

クラッシュ時にスタックトレースと配列の内容を表示 – Wain

+0

tableviewをリロードせずに 'filteredMovies'配列に変更していますか? 'filteredMovies'に何が起こっているのか分からないので、ここでしか推測できません。 – Eendje

答えて

0

あなたが調査しなければならないプログラミングロジック(tableViewがロードされた後にfilteredMoviesのいくつかの要素を削除するかもしれません)。

結局のところ、常に境界をチェックすることは、疑問があるとき、またはクラッシュ(フォールトトレランスの概念)が発生しないことを確認したいときには、良いことです。

関連する問題