我想在我传递的模型对象的DidSet中设置UITextField(IBOutlet)的文本值。
这里是代码:
let manageSettingViewController: ManageSettingViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ManageSettingViewController") as ManageSettingViewController
self.navigationController?.pushViewControllerCustom(manageSettingViewController)
manageSettingViewController.setting = setting
在manageSettingViewController的didSet中:
var setting: Setting? {
didSet
{
keyTextField.text = setting?.label
valueTextField.text = setting?.value
}
如何设置文字?因为在这种情况下Xcode崩溃,因为“keyTextField是nil”:(
答案 0 :(得分:2)
您在实例化manageSettingViewController.setting
后立即设置manageSettingViewController
- 此时,它尚未从nib / storyboard加载其视图,因此它的所有IBOutlet
变量(大概是keyTextField
和valueTextField
)仍然是零。从调用ManageSettingViewController
的{{1}}方法开始,这些文本字段就已连接起来。
您可以在设置之前更改viewDidLoad
以检查可选插座,或通过可选链接进行分配:
didSet
这可以避免崩溃,但也无法更改文本字段的内容。您还必须为didSet {
keyTextField?.text = setting?.label
valueTextField?.text = setting?.value
}
实施viewDidLoad
以检查其ManageSettingViewController
属性并相应地设置其文本字段。
当然,这会复制setting
中的代码。如果您想从其他地方设置didSet
并自动更新UI,那么该代码可能仍然有用,但在加载UI之前,setting
无法帮助您更新UI。