在UITableViewController中,我有一个可选属性,它是CNContact。如果不是零,我想用联系人的数据填充一些文本字段。
这里是酒店:

var contact: CNContact? = nil {
    didSet {
        if contact != nil {
            prefillFromContact(contact!)
        }
    }
}

下面是设置文本字段的代码
func prefillFromContact(con: CNContact) {
    print(con.givenName)
    firstNameTextField.text = con.givenName
}

print语句可以工作,并返回联系人的姓名,但下面的行抛出一个错误。
Kate
fatal error: unexpectedly found nil while unwrapping an Optional value

我搞不懂为什么它在打印语句上起作用,但在下面这行不行。

最佳答案

我假设firstNameTextField声明为隐式可选,如下所示:

var firstNameTextField: UITextField!

您将导致在viewDidLoad之前调用此代码。
如果是,则firstNameTextField为零。只有在加载了从XIB/Storyboards加载的UIViews之后,才可以设置这些UIViews的值。在此之前,他们的销售渠道是零。
作为旁白(尽管这不是引起你问题的原因):
if contact != nil {
     prefillFromContact(contact!)
}

更迅速的是:
if let contact = contact {
     // this is only true if contact != nil, and you have a contact variable
     // that is of type CNContact, not CNContact?
     prefillFromContact(contact)
}

关于ios - 意外发现nil,即使展开后也是如此,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38015375/

10-10 16:14