2015-04-23 3 views
22

В настоящее время я пытаюсь создать пользовательскую ячейку таблицы, используя xCode 6.3 swift 1.2. По какой-то причине в методе cellforRowAtIndexPath я просто не могу настроить свою переменную ячейки. Код компилируется, но потом, когда эта строка кода хитов:Не удалось присвоить значение типа 'UITableViewCell' в '(AppName). (CustomCellName)'

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

Я получаю эту ошибку: Не удалось бросить значение типа «UITableViewCell» (0x1112f5a18) к «CampusExchange.MessageCell» (0x10e8318f0).

Вот мой полный метод: (я использую Разбор если вы задаетесь вопросом о том, как я устанавливаю сообщение)

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 
} 

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

+7

Похоже, что вы не установили пользовательский класс для вашей ячейки прототипа в раскадровке – Paulw11

+2

У меня было это. Но почему-то это не сработало. То, что случайно работало, - это удаление пользовательского класса для моей ячейки. Затем создайте, сбой приложения, а затем вернитесь и сбросьте пользовательский класс. Теперь он работает. Спасибо, что указал мне в правильном направлении! – obo20

ответ

7

В viewDidLoad()

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

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

  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 Теперь вы используете правильный идентификатор ячейки.

+7

В моем конкретном случае код был прав, но в раскадровке, где я создал UITableviewCell, я забыл установить свой собственный класс с инспектором для UITableViewCell. В инспекторе под пользовательским классом он все еще сказал «UITableViewCell», когда он должен был сказать «UserInfoCell», который был именем пользовательского подкласса, который я создал. – xdeleon

+0

Пункт 2. помочь много. Благодаря! –

+1

Точка 2 была для меня проблемой! Это имеет решающее значение, поскольку с помощью обычного контроллера табличного наблюдения ячейка, подлежащая регистрации, не указывается, поэтому достаточно интуитивно предположить, что идентификатор повторного использования должен использоваться для обоих мест. Взял меня навсегда, чтобы найти этот ответ. Спасибо alot –

25

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

self.tableView.register(CustomCell.self, forCellReuseIdentifier: "Cell") 
+0

Это исправило мою проблему. Спасибо –

+2

То же самое здесь, спасибо вам. – Danyl

0

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

3

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

0

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

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

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

  1. Перейти к Interface Builder
  2. Нажмите на соответствующую раскадровку
  3. Нажмите на соответствующую ячейку в Tableview
  4. В панели Утилиты (правая сторона), щелкните значок «Показать идентификатор инспектора»
  5. В разделе «Пользовательский класс» -> «Класс» установите класс на что-нибудь еще и запустите приложение.Сбой приложения, поскольку классX не может отличить класс1
  6. В разделе «Пользовательский класс» -> «Класс» установите класс в правильный класс и заново запустите.
0

Воссоздать свой класс, используя cocoaClass и выберите UItableViewCell

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

1

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

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

enter image description here

+1

Это исправлено для меня! –

Смежные вопросы