2017-10-05 4 views
0

この問題は私を3日間狂っています。 cellForRowAtでカスタムテーブルセルクラスが機能しない

class TransitoPalinaTableViewCell: UITableViewCell { 

@IBOutlet weak var lblOrario: UILabel! 
@IBOutlet weak var lblDestinazione: UILabel! 
@IBOutlet weak var lblNote: UILabel! 
@IBOutlet weak var lblBus: UILabel! 

override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
} 

override func setSelected(_ selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

    // Configure the view for the selected state 
} 

} 

と私のビューコントローラに私がこの持っている:私は、カスタムセルクラスを作成した「セル」とカスタムクラス「TransitoPalinaTableViewCell」:私はテーブルビューのセル識別子を設定したストーリーボードに

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TransitoPalinaTableViewCell 

    // Configure the cell... 
    let hour = Int(self.transito.listaCorse[indexPath.row].tempoTransito)/3600 
    let mins = Int(self.transito.listaCorse[indexPath.row].tempoTransito % 3600)/60 

    cell.lblOrario?.text = String(format: "%02d:%02d", hour, mins) 
    cell.lblDestinazione?.text = self.transito.listaCorse[indexPath.row].arrivoCorsa 
    cell.lblNote?.text = "" 
    cell.lblBus?.text = self.transito.listaCorse[indexPath.row].automezzo 


    cell.backgroundColor = UIColor.init(red: 0, green: 60/255, blue: 113/255, alpha: 1) 

    return cell 
} 

を。

問題はcellForRowAtが呼び出されたときに、私がキャッチされない例外により 「NSInternalInconsistencyException」、理由にアプリを終了エラー

を得たことである:「識別子セルとセル をデキューすることができない - ペン先を登録する必要があります 識別子のクラス、またはストーリーボード内のプロトタイプセルを接続する '

dequeueReusableCellコマンドの行にあります。

私は他の記事で読んで、私は)(のviewDidLoadでラインに self.tableView.register(TransitoPalinaTableViewCell.self, forCellReuseIdentifier: "Cell")を入れていなかった - それは、ストーリーボード内のコンセントに接続されていない、ブランドの新しい細胞モデルを作成すると思います。 TransitoPalinaTableViewCellクラスとそのアウトレットを再度作成しようとしましたが、何も変更されませんでした。

助けてください。

+0

を使用したが、ちょうどその理由を除外するためにcellForRowAtであなたのセルをテーブルビューのプロトタイプセルとしてデザインしましたか? – DonMag

+0

このリンクを参考にすることができhttps://stackoverflow.com/questions/540345/how-do-you-load-custom-uitableviewcells-from-xib-files –

+0

@DonMagはい私でした。私のストーリーボードでは、自分のオブジェクトをセルの中に落として、Dynamic Prototypeセルをテーブルに1つ設定しました。 – cicaletto79

答えて

1

セルをセルクラスまたはセルノブのいずれかで登録することができます。

tableView.register(UINib(name: "YourNibName", bundle: nil), forCellReuseIdentifier: "Cell") 

ただし、これはXibファイルにセルを作成した場合にのみ機能します。ストーリーボードで作成されている場合は、作成したViewController以外の場所でそのセルを使用することはできません。

+0

私のviewDidLoadで セルのセルタイブを入れてみましたが、私は "バンドルにNIBをロードできませんでした。 " – cicaletto79

+0

私が書いたように、セルがStoryboardではなくXibで作成されていれば動作します。あなたのセルはXibかストーリーボードにありますか? –

+0

あなたは正しいです!本当にありがとうございます - それは動作します! – cicaletto79

0

.xibファイルで新しいCustomTableViewCellクラスを作成し、クラス。 xibファイルの属性インスペクタで識別子としてcustomCellを設定し、テーブルビューコントローラのストーリーボードから他の識別子を削除しました。 viewDidLoadで

私はこのようなセルを登録:、

let cellNib = UINib.init(nibName: "CustomTableViewCell", bundle: nil) 
self.tableView.register(cellNib, forCellReuseIdentifier: "customCell") 

と私はあなたのストーリーボードでは...はい、おそらく明らかに

let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! CustomTableViewCell 
関連する問題