2016-12-17 29 views
0

私は、Swift 3で簡単なタイトルとメッセージテーブルのセルを取得しようと試みました。これは、動作するために得られた最も遠くかつ最も近いものです。私はThread 1: Signal SIGABRT私のアプリケーションデリゲートファイルの最初の行にエラーが発生し、libc++abi.dylib: terminating with uncaught exception of type NSExceptionは私のコンソール出力にあります。Swift 3カスタムセルでエラーが発生する

セルクラス。アウトレットは、私のストーリーボードファイルのプロトタイプセルに接続されています。

import UIKit 
class MyTableCell: UITableViewCell { 
    @IBOutlet weak var label1: UILabel! 
    @IBOutlet weak var label2: UILabel! 
} 

コードがテーブルに

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

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

    if cell == nil { 
     let cell:MyTableCell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! MyTableCell 
     cell.textLabel?.text = posts[indexPath.row].title 
     cell.detailTextLabel?.text = posts[indexPath.row].message 
     return cell 
    } else { 
     cell.label1.text = posts[indexPath.row].title 
     cell.label2.text = posts[indexPath.row].message 
    } 



    return cell 
} 

をロードする注:私は、オンライン表をロードするために上記のコードを発見しました。これは私のより簡単なコードが正しく動作していなかったことです。

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

    let cell:MyTableCell = self.tableView.dequeueReusableCell(withIdentifier: "Cell") as! MyTableCell 

    cell.label1.text = posts[indexPath.row].title 
    cell.label2.text = posts[indexPath.row].message 

    return cell 
} 
+0

'1).'あなたのコードは、エラーのある行に停止するように例外ブレークポイントを追加します。 '2).'例外ログから該当する行を追加します(つまり、アプリの停止原因となった特定のエラー)。 '3).'おそらく、新しいバージョンの' dequeueReusableCell'が必要です: 'cell :: MyTableCell = self.tableView.dequeueReusableCellWithIdentifier(" Cell "、forIndexPath:indexPath)を! MyTableCell'は非ゼロであることが保証されています。 '4).'ストーリーボードに正しいセル識別子を設定していること、そしてカスタムセルのクラスが正しいことを確認してください。 –

+0

問題を解決できましたか? –

+0

@RoboticCatは、最新のバージョンではありません。クイックフィックスでは、 'cell:MyTableCell = self.tableView.dequeueReusableCell(withIdentifier: "Cell"、:indexPath)を!私の元の質問にあったMyTableCellです。 –

答えて

0

nilの場合はtableView.dequeueReusableCellを呼び出すとき、あなたは指定されたUITableViewCell初期化子を用いて細胞をインスタンス化する必要があります返されます。あなたが提供したコードが振り向けられ、再びtableView.dequeueReusableCellが呼び出され、再びnilが返されます。

次を使用し、新しいセルをインスタンス化するには、次の

let cell = MyTableCell(style: .default, reuseIdentifier: "MyTableCell")

+0

どうすればいいですか? –

+0

これは私の次の行に「スレッド1:EXC_BAD_INSTRUCTION(コード= EXC_1386_INVOP、サブコード= 0x0)」エラーを表示します。 –

+0

'detailTextLabel'を使いたい場合は' value1'、 'value2'、' subtitle'のスタイルを使わなければなりません。 – damacster

関連する問題