呈现UIView(iOS)时出现Nil错误

时间:2016-06-15 17:50:06

标签: ios uiview

我正在尝试创建一个从UIViewController呈现的视图。为此,我创建了一个UIView(OnboardingCaptureView.swift)的子类,以及一个.xib接口文件。在我的界面中,我有一个名为alertLabel的标签。在我的OnboardingCaptureView类的init方法中,我设置了4个参数,并将标签设置为字符串参数message。

出于某种原因,当我分配此视图并将其添加为子视图时,它会崩溃并说“致命错误:在展开Optional值时意外发现nil”。当我删除此标签时,它会在我所需的init中崩溃?方法。我不知道为什么我不能创建和呈现UIView的简单子类。我有一种感觉,Xcode正在烦我,但我已经构建,清理了派生数据,并重新启动了多次。我的代码有问题吗?

//Custom UIView subclass
class OnboardingCaptureView: UIView {

@IBOutlet private weak var alertLabel: UILabel!

    init(triangleXOffset: CGFloat, closeButtonOnTop: Bool, message: String, frame: CGRect) {
        super.init(frame: frame);
        //Crashes at next line, claims self.alertLabel is nil
        self.alertLabel.text = message

        connectNibUI()

    }

    required init?(coder aDecoder: NSCoder) {
        //If i disconnect the alertLabel outlet and remove it, it crashes here
        fatalError("init(coder:) has not been implemented")
    }

}


//Creating and adding subview 
let onboardingCaptureView = OnboardingCaptureView(triangleXOffset: 0, closeButtonOnTop: true, message: "Alert", frame: CGRectMake(0,0,200,200))
self.onboardingView = onboardingCaptureView
self.view.addSubview(onboardingCaptureView)

//编辑 - > connectNibUI方法

extension UIView {

func connectNibUI() {
    let nib = UINib(nibName: String(self.dynamicType), bundle: nil).instantiateWithOwner(self, options: nil)
    let nibView = nib.first as! UIView
    nibView.translatesAutoresizingMaskIntoConstraints = false

    self.addSubview(nibView)
    nibView.snp_makeConstraints { (make) -> Void in
        make.edges.equalTo(self)
    }
  }

}

1 个答案:

答案 0 :(得分:0)

可能您的alertLabel实际上未被分配 首先,只需仔细检查即可确保将插座实际连接到笔尖。

这里的问题实际上是你的自定义视图正在创建,但是nib不是。你的connectNibUI()功能发生了什么?如果您正在加载笔尖,那么您可能需要做的就是在该函数之后设置标签文本。