Ios awakeFromNib中的变量为零

Ios awakeFromNib中的变量为零,ios,swift,uiview,awakefromnib,Ios,Swift,Uiview,Awakefromnib,我创建了一个自定义UIView,并用一个对象ConnectDetailItem实例化它 我的自定义视图的代码: class InfosConnectView: UIView { var view: UIView! @IBOutlet weak var categorie: UILabel! @IBOutlet weak var distance: UILabel! @IBOutlet weak var followers: UILabel! @IBOu

我创建了一个自定义UIView,并用一个对象ConnectDetailItem实例化它

我的自定义视图的代码:

class InfosConnectView: UIView {

    var view: UIView!

    @IBOutlet weak var categorie: UILabel!
    @IBOutlet weak var distance: UILabel!
    @IBOutlet weak var followers: UILabel!
    @IBOutlet weak var descriptionTextView: UITextView!

    var connectDetailsItem:ConnectDetailsItem!

    convenience init(connectDetailsItem:ConnectDetailsItem, frame:CGRect) {
        self.init(frame: frame)
        self.connectDetailsItem = connectDetailsItem
        xibSetup()
    }

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

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

    func xibSetup() {
        view = loadViewFromNib()

        // use bounds not frame or it'll be offset
        view.frame = bounds

        // Make the view stretch with containing view
        view.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleHeight]

        view.layer.borderWidth = 1
        view.layer.borderColor = UIColor(hex: "#DDDDDD").cgColor

        // Adding custom subview on top of our view (over any custom drawing > see note below)
        addSubview(view)
    }

    func loadViewFromNib() -> UIView {

        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: "viewInfosConnect", bundle: bundle)
        let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView

        return view
    }

    override func awakeFromNib() {
        super.awakeFromNib()

        //Infos Connect
        self.categorie.text = "\(self.connectDetailsItem.category)"
        self.categorie.text = "\(self.connectDetailsItem.category)"
        if (self.connectDetailsItem.distance < 1000) {
            self.distance.text = "\(self.connectDetailsItem.distance) m"
        } else {
            let distance:NSString = NSString(format: "%.01f", Float(self.connectDetailsItem.distance)/1000)
            self.distance.text = "\(distance) km"
        }
        if(self.connectDetailsItem.followCount < 2) {
            if(self.connectDetailsItem.followCount < 1) {
                self.followers.text = "0 abonné"
            } else {
                self.followers.text = "\(self.connectDetailsItem.followCount) abonné"
            }
        } else {
            self.followers.text = "\(self.connectDetailsItem.followCount) abonnés"
        }
        self.descriptionTextView.text = self.connectDetailsItem.description
    }

}
class-InfosConnectView:UIView{
变量视图:UIView!
@IBV弱变量分类:UILabel!
@IBVAR弱var距离:UILabel!
@ibvar追随者:UILabel!
@IBMOutlet弱变量descriptionTextView:UITextView!
var connectDetailsItem:connectDetailsItem!
便利初始化(connectDetailsItem:connectDetailsItem,frame:CGRect){
self.init(frame:frame)
self.connectDetailsItem=connectDetailsItem
xib设置()
}
重写初始化(帧:CGRect){
super.init(frame:frame)
}
必需的初始化(编码器aDecoder:NSCoder){
super.init(编码器:aDecoder)!
}
func设置(){
view=loadViewFromNib()
//使用边界而不是帧,否则将偏移
view.frame=bounds
//使用包含视图拉伸视图
view.autoresizingMask=[UIViewAutoresizing.flexibleWidth,UIViewAutoresizing.flexibleHeight]
view.layer.borderWidth=1
view.layer.borderColor=UIColor(十六进制:#DDDDDD”).cgColor
//在视图顶部添加自定义子视图(在任何自定义图形上>请参见下面的注释)
添加子视图(视图)
}
func loadViewFromNib()->UIView{
let bundle=bundle(for:type(of:self))
让nib=UINib(nibName:“viewInfosConnect”,bundle:bundle)
让view=nib.instantiate(withOwner:self,options:nil)[0]作为!UIView
返回视图
}
重写func awakeFromNib(){
super.awakeFromNib()
//信息连接
self.categorie.text=“\(self.connectDetailsItem.category)”
self.categorie.text=“\(self.connectDetailsItem.category)”
if(自连接详细信息站点m.距离<1000){
self.distance.text=“\(self.connectDetailsItem.distance)m”
}否则{
让距离:NSString=NSString(格式:%.01f),浮点(self.connectDetailsItem.distance)/1000)
self.distance.text=“\(距离)公里”
}
if(self.connectDetailsItem.followCount<2){
if(self.connectDetailsItem.followCount<1){
self.followers.text=“0 abonné”
}否则{
self.followers.text=“\(self.connectDetailsItem.followCount)abonné”
}
}否则{
self.followers.text=“\(self.connectDetailsItem.followCount)abonnés”
}
self.descriptionTextView.text=self.connectDetailsItem.description
}
}
awakeFromNib()
中,
connectDetailItem
nil
。为什么?

我像这样实例化我的视图:
let viewInfos=InfosConnectView(connectDetailsItem:self.connectDetailsItem,frame:CGRect(x:0,y:9,width:self.view.frame.width,height:200))

我设置了断点,在输入awakeFromNib函数之前,connectDetailItem不是nil。

我找到了解决方案。 我将代码放在函数loadViewFromNib中,如下所示:

func loadViewFromNib() -> InfosConnectView {

        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: "viewInfosConnect", bundle: bundle)
        let view = nib.instantiate(withOwner: self, options: nil)[0] as! InfosConnectView

        //Infos Connect
        view.categorie.text = "\(self.connectDetailsItem.category)"
        if (self.connectDetailsItem.distance < 1000) {
            view.distance.text = "\(self.connectDetailsItem.distance) m"
        } else {
            let distance:NSString = NSString(format: "%.01f", Float(self.connectDetailsItem.distance)/1000)
            view.distance.text = "\(distance) km"
        }
        if(self.connectDetailsItem.followCount < 2) {
            if(self.connectDetailsItem.followCount < 1) {
                view.followers.text = "0 abonné"
            } else {
                view.followers.text = "\(self.connectDetailsItem.followCount) abonné"
            }
        } else {
            view.followers.text = "\(self.connectDetailsItem.followCount) abonnés"
        }
        view.descriptionTextView.text = self.connectDetailsItem.description

        return view
    }
func loadview fromnib()->InfosConnectView{
let bundle=bundle(for:type(of:self))
让nib=UINib(nibName:“viewInfosConnect”,bundle:bundle)
让view=nib.instantiate(withOwner:self,options:nil)[0]作为!InfosConnectView
//信息连接
view.categorie.text=“\(self.connectDetailsItem.category)”
if(自连接详细信息站点m.距离<1000){
view.distance.text=“\(self.connectDetailsItem.distance)m”
}否则{
让距离:NSString=NSString(格式:%.01f),浮点(self.connectDetailsItem.distance)/1000)
view.distance.text=“\(距离)公里”
}
if(self.connectDetailsItem.followCount<2){
if(self.connectDetailsItem.followCount<1){
view.followers.text=“0 abonné”
}否则{
view.followers.text=“\(self.connectDetailsItem.followCount)abonné”
}
}否则{
view.followers.text=“\(self.connectDetailsItem.followCount)abonnés”
}
view.descriptionTextView.text=self.connectDetailsItem.description
返回视图
}

检查查看地址。可能是不同的视图示例?如果我注释awakeFromNib()中的所有行,视图显示正确。您说过问题不在于“正确”显示。“connectDetailsItem”无论如何都是零。请检查内存中的视图地址。您可以在调试器中执行此操作。它看起来像:“0x12345678”尝试将
awakeFromNib中的所有代码放入函数中。并从
init
awakeFromNib
调用该函数。在哪里调用该函数?