Ios NSLayoutConstraint插座始终为零,而其他插座为';T
我正在通过xib实例化一个商店:Ios NSLayoutConstraint插座始终为零,而其他插座为';T,ios,swift,swift2,storyboard,interface-builder,Ios,Swift,Swift2,Storyboard,Interface Builder,我正在通过xib实例化一个商店: let cShop = UINib(nibName: "connectedShop", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! connectedShop 此商店已指定此自定义类别: import Foundation import UIKit class connectedShop : UIView{ @IBOutlet weak var bannerViewH
let cShop = UINib(nibName: "connectedShop", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! connectedShop
此商店已指定此自定义类别:
import Foundation
import UIKit
class connectedShop : UIView{
@IBOutlet weak var bannerViewHight: NSLayoutConstraint!
@IBOutlet weak var bannerViewTop: NSLayoutConstraint!
@IBOutlet weak var bannerViewLeft: NSLayoutConstraint!
@IBOutlet weak var bannerViewRight: NSLayoutConstraint!
@IBOutlet weak var banerDiscount: UIImageView!
@IBOutlet weak var bannerImageShop: UIImageView!
@IBOutlet weak var bannerTitle: UILabel!
@IBOutlet weak var bannerDescription: UILabel!
@IBOutlet weak var bannerButton: UIButton!
@IBAction func bannerButtonAction(sender: UIButton) {
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
}
}
根据代码,我给这家店打电话如下:
let cShop = UINib(nibName: "connectedShop", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! connectedShop
cShop.bannerTitle.text = "shopTitle" //work
shopContainer.addSubview(cShop)
cShop.bannerViewLeft.constant = 0 //make my app crash
cShop.bannerViewRight.constant = 0 // "
cShop.bannerViewTop.constant = 0 // "
当我设置bannerTitle.text
属性时,我的应用程序将继续并进行调试,我看到此出口已初始化,但约束未初始化。当编译器位于指定常量的行中时,它总是抛出相同的错误:
fatal error: unexpectedly found nil while unwrapping an Optional value
调试我看到有一个已初始化的出口:
有人知道为什么会这样吗
以下是我的观点:
我也有同样的问题。
将约束输出更改为强。如何使约束输出变强: 只需从声明中删除弱
@IBOutlet weak var bannerViewHight: NSLayoutConstraint!
到
为所有人做这件事,就这样。你能展示一下你是如何在Interface Builder中连接他们的吗?编辑后添加我的连接图片你能调用
打印(cShop.bannerTitle.text)
?如果接收器为nil,则设置该值不会导致崩溃,这就是为什么它不会在此行崩溃,但是bannerTitle
也可能为nil。我检查了,它不是nil。此外,还有一个outlet不是nil,只有一个,bannerViewHight,自定义类的第一个。这怎么可能?我不明白…你能在Intreface Builder中选择你的connectedShop,然后选择右边的Connections Inspector吗?您将能够看到所有已连接的插座。这解决了我的问题,但我不明白它为什么起作用。你能解释一下原因吗@SergioM@YusufKamilAK当然由于引用很弱,约束的引用将在生命周期的某个点被删除。@SergioM这并不能真正解释问题所在。当然,在我的例子中,视图是一个单元格。当重新使用单元格时,由于引用较弱,因此取消分配了约束。
@IBOutlet var bannerViewHight: NSLayoutConstraint!