web-dev-qa-db-ja.com

タイプ 'UITableViewCell'の値を '(AppName)。(CustomCellName)'にキャストできませんでした

現在、xCode 6.3を使用してカスタムテーブルビューセルを作成しようとしていますSwift 1.2。cellforRowAtIndexPathメソッドで何らかの理由で、セル変数を設定できないようです。コンパイルされますが、次のコード行がヒットすると:

    var cell:MessageCell = tableView.dequeueReusableCellWithIdentifier("messageCell") as! MessageCell

このエラーが発生します:タイプ 'UITableViewCell'(0x1112f5a18)の値を 'CampusExchange.MessageCell'(0x10e8318f0)にキャストできませんでした。

完全な方法は次のとおりです(メッセージの設定方法について疑問がある場合は、Parseを使用しています)。

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var cell:MessageCell = tableView.dequeueReusableCellWithIdentifier("messageCell") as! MessageCell

    let message = messagesArray[indexPath.row]["Message"] as? String
    cell.messageOutlet.text = message
    return cell
}

ご協力ありがとうございます。これを機能させることができないようです。

35
obo20

このシナリオで確認できることがいくつかあります。

  1. 通常、@IBOutlet weak var tableView: UITableView!によって、テーブルがクラスにリンクされているかどうかを確認します

  2. カスタムテーブルビューセルの登録:self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")カスタムセルのクラスとIDが異なる場合でも、「UITableViewCell」と識別子「cell」を使用することに注意してください。

  3. CellForRowAtIndexPathでセルをデキューします:let cell: MessageCell = self.tableView.dequeueReusableCellWithIdentifier("messageCell") as! MessageCellこれで、正しいセル識別子を使用します。

65
Rodrigo Pinto

viewDidLoad() methodでカスタムセルを登録します。

self.tableView.register(CustomCell.self, forCellReuseIdentifier: "Cell")
38
Madhurya Gandi

私は同じ問題を抱えていました、セルにカスタムクラスを設定しましたが、モジュールを設定するのを忘れていました enter image description here

このようなモジュールを選択した後、それは働いた

enter image description here

11
Deepti Raghav

ViewDidLoad()で

// register custom table view cell from nib
self.tableView.registerNib(UINib(nibName: "MessageCell", bundle: nil), forCellReuseIdentifier: "messageCell")
9
Long Pham

Xコード9.4
ここでの一般的な回答の1つとは異なり、このソリューションはカスタムテーブルビューセルの悪夢を解決しました。ストーリーボードを使用していて、すべてが正しく接続されている場合、viewDidLoadにカスタムtableViewセルを登録する必要はありません。

viewDidLoadから削除:
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")

同じエラーメッセージが表示されました。しかし、私にとっての問題は、インターフェイスビルダーでカスタムセルのクラスを設定しなかったことです。

5
Milander

私の場合、UITableViewCellクラスは変更していません。最初はDetailsTableViewCellクラスですが、TableViewCellClassという新しいクラスを削除して追加しました。しかし、ここでセルクラス名を変更するのを忘れています。

だからもう一度ここでTableViewCellクラス名を確認して変更してください以下のスクリーンショットを参照してください

enter image description here

3
iOS

カスタムセルクラス名とセルIDを同じままにします。

   self.tableView.register(CustomCell.self, forCellReuseIdentifier: "CustomCell")
1
Arafin Russell

まず、CocoaClassを使用してセルクラスを再作成することをお勧めします。似たような間違いがありました-CollectionViewCellを作成し、自分の間違いを認識したら、親クラスの名前を変更することにしました。しかし、コンパイラは間違いに気付いていません。ビルド中にこのエラーが発生しました。

0
Daniel Chepenko

Swift 3の構文:

self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
0
bj97301

cocoaClassを使用してクラスを再作成し、UItableViewCellを選択します

私はこれが私のために働いた同じ問題を抱えていました。

0
daniel pham

同じエラーが発生しました。 obo2Oが彼のコメントで述べているように、彼のソリューションは私のために働いた:

  1. Interface Builderに移動します
  2. 関連するストーリーボードをクリックします
  3. テーブルビュー内の関連するセルをクリックします
  4. [ユーティリティ]パネル(右側)で、[識別インスペクターを表示]アイコンをクリックします
  5. [カスタムクラス]セクション-> [クラス]フィールドで、クラスを他のクラスに設定し、アプリケーションを実行します。 classXがclassYにキャストできないため、アプリケーションがクラッシュします
  6. [カスタムクラス]セクション-> [クラス]フィールドで、クラスを正しいクラスに設定し、再実行します。
0
Jacksonsox