it-roy-ru.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
}

спасибо за любую помощь, которую вы могли бы иметь. Я просто не могу заставить это работать.

33
obo20

В этом сценарии вы можете проверить несколько вещей:

  1. Посмотрите, связана ли ваша таблица с вашим классом, обычно с помощью @IBOutlet weak var tableView: UITableView!

  2. Зарегистрируйте пользовательскую ячейку табличного представления: self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") Обратите внимание, что вы используете «UITableViewCell» и идентификатор «cell», даже если ваша пользовательская ячейка имеет другой класс и идентификатор.

  3. Удалите вашу ячейку из очереди в cellForRowAtIndexPath: let cell: MessageCell = self.tableView.dequeueReusableCellWithIdentifier("messageCell") as! MessageCell Теперь вы используете правильный идентификатор ячейки.

63
Rodrigo Pedroso

Зарегистрируйте свою CustomCell в методе viewDidLoad():

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

В viewDidLoad ()

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

У меня была та же проблема, я установил пользовательский класс для ячейки, но забыл установить модуль  enter image description here

после выбора модуля это сработало

 enter image description here

5
Deepti Raghav

У меня было то же сообщение об ошибке. Но для меня проблема была в том, что я не установил класс своей пользовательской ячейки в конструкторе интерфейса.

5
Milander

X код 9.4
В отличие от одного из популярных ответов здесь, это решение исправило мой кошмар с настраиваемыми ячейками таблицы. Если вы используете раскадровку и все правильно подключено, вам не нужно регистрировать пользовательскую ячейку tableView в viewDidLoad.

Удалить из viewDidLoad:
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")

3
Patrik Rikama-Hinnenberg

В моем случае я не изменил класс UITableViewCell. Изначально это класс DetailsTableViewCell, но я удалил и добавил новый класс с именем TableViewCellClass. Но я забыл изменить имя класса ячейки здесь.

Итак, еще раз проверьте и измените имя класса TableViewCell здесь см. Ниже снимок экрана

 enter image description here

2
iOS

Во-первых, я предлагаю вам воссоздать ваш класс ячеек, используя CocoaClass. У меня была довольно похожая ошибка - я создал CollectionViewCell, и когда я узнал свою ошибку, я решил просто переименовать родительский класс. Однако, компилятор не заметил никакой ошибки, у меня была эта ошибка во время сборки.

0
Daniel Chepenko

Синтаксис Swift 3:

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

Создайте заново свой класс с помощью cocoaClass и выберите UItableViewCell

У меня была та же проблема, это работало на меня.

0
daniel pham

У меня была такая же ошибка. Как отмечает obo2O в своем комментарии, его решение сработало для меня:

  1. Перейти к Интерфейсному Разработчику
  2. Нажмите на соответствующую раскадровку
  3. Нажмите на соответствующую ячейку в табличном представлении
  4. На панели утилит (справа) щелкните значок «Показать инспектор идентификации»
  5. В разделе «Пользовательский класс» -> «Класс» задайте для класса что-либо еще и запустите приложение. Сбой приложения, для classX не может быть приведен к classY
  6. В разделе «Пользовательский класс» -> «Класс» установите для класса правильный класс и повторите его.
0
Jacksonsox