приведение значения типа «UITableViewCell» к пользовательской ячейке

Обычно у меня никогда не бывает проблем с этим шагом, но по какой-то причине, когда я перенастроил свою раскадровку, у меня возникла проблема с этой частью моего кода:

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

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! UITableViewCell

    (cell as! TableViewCell).usernameLabel.text = friendsArray[indexPath.row] as String


    return cell
}

Я сделал все очевидные вещи, например, убедился, что идентификатор ячейки — «Cell».

Моя ошибка такова:

Не удалось преобразовать значение типа UITableViewCell (0x1094ada18) в YOpub.TableViewCell (0x106620410).

РЕДАКТИРОВАТЬ: проблема заключалась в том, что у меня было self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell") в моей функции didLoad. После удаления этой строки мой код снова заработал.


person Justin    schedule 24.05.2015    source источник
comment
Какая у вас точная проблема? Я знаю, что моя проблема связана с использованием as!   -  person nhgrif    schedule 25.05.2015
comment
Я получаю эту ошибку: Не удалось преобразовать значение типа «UITableViewCell» (0x10f61ea18) в «YOpub.TableViewCell».   -  person Justin    schedule 25.05.2015
comment
Вы изменили тип ячейки в раскадровке на TableViewCell?   -  person Mustafa Ibrahim    schedule 25.05.2015
comment
Да, я сделал это. Может есть другие предложения?   -  person Justin    schedule 25.05.2015
comment
Это ошибка компилятора? или авария?   -  person Mustafa Ibrahim    schedule 25.05.2015
comment
Мой ответ был правильным. Пожалуйста, примите это.   -  person matt    schedule 20.04.2016


Ответы (2)


  • Возможно, вы забыли сообщить раскадровке, что эта ячейка является TableViewCell. Выберите ячейку прототипа и установите пользовательский класс в инспекторе удостоверений.

  • Возможно, вы позвонили registerClass:forCellReuseIdentifier:. Если это так, удалите этот вызов; на самом деле это предотвращает получение ячейки из раскадровки.

  • Вы звоните tableView.dequeueReusableCellWithIdentifier. Это большая ошибка. Вы должны позвонить tableView.dequeueReusableCellWithIdentifier:forIndexPath:.

person matt    schedule 24.05.2015
comment
Я это сделал. Это не было проблемой. - person Justin; 25.05.2015
comment
Я это сделал. Это не было проблемой. Я уверен, что ответ настолько мал, что я просто не уверен, что это такое, я думал, что правильно рассмотрел все основы. Мэтт, я могу сказать, что ты молодец со Свифтом, так как ты написал об этом книгу! Что еще я должен проверить? - person Justin; 25.05.2015
comment
Уверяю вас, проблема в том, что вы получаете UITableViewCell, а не TableViewCell. - Скажи мне вот что: ты случайно не реализовал registerClass:... или registerNib:...? Если так, то это ошибка; это предотвращает получение ячейки из раскадровки. - person matt; 25.05.2015
comment
Кстати, если этот проект не слишком частный, я с удовольствием взгляну на него для вас. Обещаю особо ничего не рассматривать, кроме раскадровки и кода контроллера табличного представления. - person matt; 25.05.2015
comment
Я сделал self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: Cell), но теперь, когда я удалил его, таблица работает отлично, спасибо! - person Justin; 25.05.2015
comment
I had done self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell") Закомментируйте. Но также посмотрите мой измененный ответ. Вы должны позвонить tableView.dequeueReusableCellWithIdentifier:forIndexPath:. - person matt; 25.05.2015
comment
Да, проблема в registerClass:forCellReuseIdentifier!! Пойди разберись - person user1366265; 03.06.2015
comment
@ user1366265 Мне не нужно разбираться. Я знаю, что делает registerClass: - он предотвращает использование раскадровки, как я сказал в своем ответе. - person matt; 03.06.2015

Одна из причин, возможно, в модуле инспектора идентификации отличается от имени вашего проекта. введите здесь описание изображения

person Vijayvir Sing Pantlia    schedule 21.07.2016