2016-09-14 21 views
-2

私は友人の配列、それらの関連情報の配列を持っています。私はテーブルビューでセルをレンダリングしていますが、これは素晴らしいです。私は画面上のすべてをクリックしてたくさんの上/下にスクロールすると、アプリをクラッシュさせることができます...そして私は私の人生のために理由を理解できません!Swift - UITableVewControllerの範囲外のインデックス

これはエラーです:致命的なエラー:インデックスが範囲外

は、この問題が発生した理由として韻か理由があるように思えませんし、それは本当に紛らわしいです。洞察は高く評価されます。

これは失敗クラスです:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! PictureCell 
    let pos = self.positiveVoteArray.reduce(0,combine: {$0 + $1}) 
    let neg = self.negativeVoteArray.reduce(0,combine: {$0 + $1}) 
    let progress = (pos + neg)/pos 

//Fails below this line, first reference to indexPath.row // 
    cell.usernameBtn.setTitle(usernameArray[indexPath.row], forState: .Normal) 
    cell.uuidLbl.text = uuidArray[indexPath.row] 

    avaArray[indexPath.row].getDataInBackgroundWithBlock { (data:NSData?, error:NSError?) in 
     if error == nil { 
      cell.avaImg.image = UIImage(data: data!) 
     } 
    } 

    if votedFriendsArray.contains((PFUser.currentUser()?.username!)!) { 
     cell.scoreBar.hidden = false; 
     cell.dislikeBtn.hidden = true; 
     cell.likeBtn.hidden = true; 
     cell.scoreBar.setProgress(progress, animated: true) 

    } else { 
     cell.scoreBar.hidden = true; 
     cell.dislikeBtn.hidden = false; 
     cell.likeBtn.hidden = false; 
    } 

    picArray[indexPath.row].getDataInBackgroundWithBlock { (data:NSData?, error:NSError?) in 
     if error == nil { 
      cell.picImg.image = UIImage(data: data!) 
     } 
    } 

    // assign index 
    cell.usernameBtn.layer.setValue(indexPath, forKey: "index") 

    return cell 
} 
+2

どのラインにエラーが表示されますか? –

+0

@SamMエラーがコメントの下にある、8行目 – matt

答えて

0

あなたが最も可能性が高いtableView(UITableView, numberOfRowsInSection: Int)内の行の間違った番号を設定しています。 usernameArray.countに設定する必要があります。アイテムを削除する場合は、現在の状態を維持する必要があります。次の行を見ると、uuidArrayの数はusernameArrayと同じでなければなりません。

+0

だから私はusernameArray.count ..を使用していますが、おそらく私はuuidArray.countを使うべきです。私がやっているのは、新しいビューに移動してuuidArray [indexPath.row]を押したセルをクリックしたときです。これは大変効果的ですが、束をタップ/スクロールするとエラーが発生します。 なぜ**時々**エラーが発生するのですか? – matt

+0

'uuidArray'の数をチェックします。少なくとも、usernameArrayと同じ数の項目が必要です。 – MirekE

関連する問題