无法从nib实例化UIView。 "警告:无法加载任何Objective-C类信息"

时间:2016-01-03 20:53:15

标签: ios xcode swift uiview nib

我得到"无法加载任何Objective-C类信息。这将显着降低可用类型信息的质量。"初始化此类的实例时在控制台中发出警告:

@IBDesignable
class SystemMessage: UIView{

    @IBOutlet weak var lbl_message: UILabel!

    var view: UIView!

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

        setup()
    }

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

        setup()
    }

    func setup(){
        view = loadViewFromNib()

        view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]
        addSubview(view)
    }


    func loadViewFromNib() -> UIView{
        let bundle = NSBundle(forClass: self.dynamicType)
        let nib = UINib(nibName: "SystemMessage", bundle: bundle)
        let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView

        return view 
    }


}

执行在let view = nib.instantiateWithOwner...行停止"线程1:EXC_BAD_ACCESS(代码= 2 ...)"

这背后可能的原因是什么?

2 个答案:

答案 0 :(得分:8)

找到解决方案。这一切都是为了理解xib如何工作。

我所做的是我为视图和文件所有者设置了类,并连接了View中的所有出口而不是文件所有者。

答案 1 :(得分:0)

这似乎是你要在实例化一个视图的过程中走得很远。您有一个类SystemMessage的视图,它实例化一个名为SystemMessage的笔尖,然后将其作为视图插入:/

最简单的方法是将Xib中的根视图设置为SystemMessage

类型

enter image description here

然后将您的插座连接到刚刚提供正确类型的视图

enter image description here

这意味着您可能会丢失代码并最终

import UIKit

@IBDesignable
class SystemMessage: UIView {

  @IBOutlet weak var lbl_message: UILabel!

  static func loadViewFromNib() -> SystemMessage {
    return NSBundle(forClass: self).loadNibNamed("SystemMessage", owner: nil, options: nil).first as! SystemMessage
  }

}

这只是为您提供了一种使用SystemMessage.loadViewFromNib()从代码中实例化视图的简便方法。在此实例中可能未正确设置File's Owner