Генерирование экземпляра пользовательского UIView UINib, выдающего ошибку «не соответствует кодовому значению» - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь использовать пользовательский uiview для библиотеки смахивания карточек в стиле трутов под названием Koloda, которая требует, чтобы я передавал uiview для каждой карты в стеке. Я пытаюсь использовать пользовательский интерфейс с соответствующими полями / информацией, и после тщательного тестирования я обнаружил, что генерация экземпляра uinib выдает ошибку «не соответствует кодировке значения ключа», несмотря на то, что все мои розетки подключены заказ.

Я попытался воссоздать все свои IBOutlets, зайдя так далеко, что просто начал заново с новым файлом XIB с новыми подключениями. Когда я перетаскиваю пользовательский интерфейс на контроллер представления в раскадровке и подгоняю его к своему пользовательскому типу, он не обнаруживает проблем, и я могу манипулировать его различными свойствами по желанию. Только при создании экземпляра пользовательского представления я получаю сообщение об ошибке.

class VoteCard: UIView {

@IBOutlet var contentView: UIView!
@IBOutlet weak var proPicImg: UIImageView!
@IBOutlet weak var nameLbl: UILabel!
@IBOutlet weak var homeLbl: UILabel!
@IBOutlet weak var ratingLbl: UILabel!

override init(frame: CGRect) {
    super.init(frame: frame)
    commonInit()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    commonInit()
}

func commonInit() {
    Bundle.main.loadNibNamed("VoteCard", owner: self, options: nil)
    contentView.fixInView(self)
}

class func instanceOf() -> VoteCard {
    return UINib(nibName: "VoteCard", bundle: nil).instantiate(withOwner: nil, options: nil).first! as! VoteCard
}

}

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

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Там могут быть некоторые выходы, которые сначала были определены, а затем удалены из вашего класса. Но они не удаляются из вашей раскадровки или XIB. Пожалуйста, проверьте эти розетки и удалите их. Пожалуйста, обратитесь к изображению. Здесь buttonShow нет в моем представлении контроллера, поэтому удалите его.

enter image description here

Надеюсь, это поможет.

0 голосов
/ 10 января 2019

Пожалуйста, посмотрите этот ответ: https://stackoverflow.com/a/52831749/2537616

Вот идея:

  1. Установите базовый класс вашего пользовательского представления в файле .xib.
  2. Подключите розетку как обычно.
  3. Затем создайте статический помощник для создания экземпляра UINib.
...