Этот класс не является ключевым значением, совместимым с кодировкой для ключа... почему?

Я связал вывод из IB с кодом, как показано ниже.

class DiaryTableViewCell: UITableViewCell {
    @IBOutlet weak var TitleLabel: UILabel!
    @IBOutlet weak var SubTitleLabel: UILabel!
    @IBOutlet weak var leftImageView: UIImageView!
    @IBOutlet weak var rightImageView: UIImageView!
}

Здесь я регистрирую класс:

override func viewDidLoad() {
   self.title = "My Diary"
   cellNib = UINib(nibName: "TableViewCells", bundle: nil)
   tableView.registerClass(DiaryTableViewCell.classForCoder(), forCellReuseIdentifier: kCellIdentifier)
}

enter image description here

enter image description here

Но я продолжаю получать следующую ошибку времени выполнения:

*** Завершение приложения из-за неотображенного исключения "NSUnknownKeyException", причина: "... setValue: forUndefinedKey:]: этот класс не является ключевым значением, совместимым с кодировкой для ключа SubTitleLabel. '

Из следующего кода:

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

var cell = tableView.dequeueReusableCellWithIdentifier(kCellIdentifier) as DiaryTableViewCell?

if (cell == nil) {
    tableView.registerClass(DiaryTableViewCell.classForCoder(), forCellReuseIdentifier: kCellIdentifier)
    cell = cellNib?.instantiateWithOwner(self, options: nil)[0] as? DiaryTableViewCell
                cell?.selectionStyle = .None
}

if (cell != nil) {
    println("\(x++)) Inside cell")
    cell!.TitleLabel.text = "Hello"
    cell!.SubTitleLabel.text = "World"
}

return cell!
}

В частности, это происходит здесь:

cell = cellNib?.instantiateWithOwner(self, options: nil)[0] as? DiaryTableViewCell

Вопрос: Как я нарушаю совместимость с ключевыми значениями для UILabel?

Этого еще не было... UILabel соответствует требованиям KVO.

+2
04 нояб. '14 в 7:08
источник поделиться
5 ответов

Я связался с НЕПРАВИЛЬНЫМ источником!

enter image description here

Вот результат:

enter image description here

+7
04 нояб. '14 в 19:37
источник

Связанные вопросы


Похожие вопросы

Вы не должны сами tableView:cellForRowAtIndexPath instantiateWithOwner tableView:cellForRowAtIndexPath внутри tableView:cellForRowAtIndexPath.

Зарегистрируйте viewDidLoad в viewDidLoad а затем dequeueReusableCellWithIdentifier выполнит всю работу за вас.

Причина вашей конкретной ошибки заключается в том, что вы вызываете instantiateWithOwner передающий self как владельца, и поэтому nib пытается DiaryTableViewCell выходы к вашему классу реализации UITableViewDataSource а не к DiaryTableViewCell.

+1
04 нояб. '14 в 10:08
источник

Показать ссылки вашего ViewController, щелкнув по нему в документе Outline. Возможно, вы увидите предупреждение в одной из ссылок. Удалите это и связать это снова, если все еще нужно.

enter image description here

0
26 янв. '19 в 18:07
источник

Я создал TableViewCell так же, как и у вас, и у вас такая же проблема. У меня есть исследования, решая проблему, но ничего. Затем я удаляю Label в TableViewCell и снова воссоздаю его, подключая его к TableViewCell через File Owner, v..v И результат правильный. Нет ошибки. Вы должны воссоздать их снова.

0
31 мая '16 в 10:40
источник

иногда это похоже на создание кнопки в xib, вы создаете одну кнопку и копируете вставить другие кнопки с одной кнопки, в этом случае эта ошибка возникает, и да удаленные соединения из xib также могут быть причиной.

0
04 нояб. '14 в 9:10
источник

Посмотрите другие вопросы по меткам или Задайте вопрос