2017-05-27 7 views
0

ここにNoobがあります。iOSアプリが多数のスライダ付きテーブルセルにクラッシュする

Iは、プログラムgrandTotal浮動小数点値は、これらのスライダ値の間で分割し、一方を変更されたとき、それらはすべてgrandTotalの100%に合計する調整されたスイフト3とIOSのUISlidersの数(globalCount)を作成しています。スライダが最小値の0を超えたり、最大値を超えたりすることはありません。

スライダの数が7未満の場合は、すべてがうまくいきます。私は、基本の構造体の値でセルのスライダの値を更新しようとするとクラッシュします。

セルの更新機能を独自の機能に移動して問題を切り分けました。私はまだクラッシュする。クラッシュは

EXC_BAD_INSTRUCTION(コード= EXC_1386_INVOP、サブコード= 0x0の)

あるとlet loopCell行に表示されます。

これは何についての提案がありますか?なぜ、それは低い数とより多くの細胞数では機能しませんか?これは条件付きのものですか?

これは私のUI

func updateCells() { 
    for i in 0...globalCount - 1 { 
     let loopCell: MyTableCell = ((myTableView.cellForRow(at: IndexPath(row:i, section: 0))) as? MyTableCell)! 
     loopCell.valueLabel.text = String(structData[i].value) 
     loopCell.cellSlider.value = structData[i].value 
    } 
} 

セル更新機能である:

https://i.stack.imgur.com/93bXD.jpg

答えて

2

cellForRow(at:)戻りnilテーブルビューセルが(現在オフスクリーン)表示されていない場合。 nilを解く力があるので、あなたはクラッシュしています。代わりに、安全に値をアンラップする(if let)バインディングのオプションを使用します。

func updateCells() { 
    for i in 0..<globalCount { 
     if let loopCell = myTableView.cellForRow(at: IndexPath(row: i, section: 0)) as? MyTableCell { 
      loopCell.valueLabel.text = String(structData[i].value) 
      loopCell.cellSlider.value = structData[i].value 
     } 
    } 
} 
+0

なぜあなたはそれがオフスクリーンだと言っていますか?または、2列目が画面外になっていますか? – Honey

+0

推測された推測。 OPは "7以上を追加する"と述べた。私は彼が画面の不動産を使い果たしていると考えて、セルをオフスクリーンにするように強制しました。 – vacawama

+0

恐ろしい!ありがとう。これを行かせる – Sean

0

それが原因それがクラッシュしたアンラップ力の使用です。データをチェックする文がたりない許可すればはそれが(アンラップ)ない許可すれば

ベスト手軽な方法は以来、を使用することです。

関連する問題