设置文本字段的值时swift为nil

时间:2015-10-14 17:13:25

标签: ios swift2

这是我对segue代码的准备

switch segue.identifier! {
        case SegueIdentifiers.SecondUIViewController.rawValue:
            print("\(SegueIdentifiers.SecondUIViewController.rawValue)")
            let secondViewController = segue.destinationViewController as? SecondViewController

            secondViewController!.resultTextField.text = "asdfasdf"
            //break
        default:
            print("nothing sweetheart")
            break
        }

我在这一行没有例外

secondViewController!.resultTextField.text = "asdfasdf"
为什么?已存在的文本字段

这是第二个视图控制器

import UIKit

class SecondViewController: UIViewController {

    @IBOutlet weak var resultTextField: UITextField!
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

1 个答案:

答案 0 :(得分:3)

outlets之前,您的viewDidLoad未设置。在此之前,他们都是nil。这就是他们选择的原因。因此,当您尝试从prepareForSegue访问它们时,它们仍为nil

我建议您向视图控制器添加新属性,并从prepareForSegue设置该属性。稍后设置outlets时,您可以更新文本字段。

// in prepareForSegue
let secondViewController = segue.destinationViewController as? SecondViewController
secondViewController!.resultText = "asdfasdf"

然后在你的视图控制器中

class SecondViewController: UIViewController {
    var resultText: String = "" {
        didSet {
            resultTextField?.text = text
        }
    }

    @IBOutlet weak var resultTextField: UITextField! {
        // Will be set once in viewDidLoad.
        // Whenever that happens update text.
        didSet {
            resultTextField.text = resultText
        }
    }
}

现在,您可以在设置resultText之前修改outlets属性中的文本字段,并且由于didSet属性观察者,它们将在设置时更新。