XIB не может быть загружен из основного комплекта. .... Почему? - PullRequest
0 голосов
/ 05 марта 2020

Сценарий: Я пытаюсь работать с «динамическими» 1024 * представлениями, где подпредставление раскадровки ссылается на XIB.

Но у меня проблема с загрузкой определенного xib-файла, расположенного в основном (текущем) комплекте. Я думаю, что это будет прямолинейно.

Вот мой простой код:

import UIKit

@IBDesignable
class AccountInformationView: UIView, Nib {
    let nibName = "AccountInformationView"
    var contentView: UIView?

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

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

    func commonInit() {
        guard let view = loadViewFromNib() else { return }
        view.frame = bounds
        addSubview(view)
        contentView = view
    }

    func loadViewFromNib() -> UIView? {
       // let bundle = Bundle(for: type(of: self))
        let mainBundle = Bundle.main
        let nib = UINib(nibName: nibName, bundle: mainBundle)
        // check the following line due to crash:
        _ = nib.instantiate(withOwner: self, options: nil).first as? AccountInformationView
        return nib.instantiate(withOwner: self, options: nil).first as? UIView
    }
}

Вылетает на линии:

nib.instantiate(withOwner: self, options: nil).first as? AccountInformationView

... причина: 'Не удалось загрузить NIB в комплекте:' NSBundle (загружен) 'с именем' AccountInformationView ''

Вот макет проекта: enter image description here

Почему я не могу найти XIB?

1 Ответ

0 голосов
/ 05 марта 2020

Я вижу, что в вашем проекте есть AccountInformationView, есть xib . Но это не значит, что в вашем комплекте есть соответствующий nib .

  • Прежде всего, xib может отсутствовать в целевом приложении, поэтому соответствующий nib никогда не попадет в комплект встроенного приложения.

  • Во-вторых, вы не дали достаточно информации, но я предполагаю, что этот код может работать в раскадровке (потому что это представление IBDesignable) - и , что никогда не сработает, потому что в то время не было пакета * , и даже если оно было, xib не было превращено в перо . Только здание может сделать перо .

...