打包后,意外地发现了零

时间:2016-06-24 14:06:28

标签: ios swift cocoa-touch

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

这是属性:

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

我无法解决为什么它适用于print语句,但不能解决以下问题。

1 个答案:

答案 0 :(得分:3)

我认为firstNameTextField被声明为隐式可选项,如下所示:

var firstNameTextField: UITextField!

您导致在viewDidLoad之前调用此代码。

如果是,firstNameTextField为零。只有在加载后才能设置从XIB / Storyboards加载的UIViews的值。在此之前,他们的网点是零。

顺便说一句(即使这不是造成问题的原因):

if contact != nil {
     prefillFromContact(contact!)
}

更像这样的Swifty:

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)
}