(Swift) PrepareForSegue: error fatal: inesperadamente encontrado nulo mientras desenvuelve un valor opcional

DetailViewController:

@IBOutlet var selectedBundesland: UILabel! 

TableViewController:

  override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { if (segue.identifier == "BackToCalculator") { var vc:FirstViewController = segue.destinationViewController as FirstViewController vc.selectedBundesland.text = "Test" } 

¡IBOutlet está conectado!

Error: error grave: inesperadamente encontrado nulo mientras desenvuelve un valor opcional

Leí varias páginas sobre Optionals pero no sabía la respuesta a mi problema.

¿Necesita más información sobre mi proyecto?

No puede escribir directamente en UILabel en prepareForSegue porque el controller de vista aún no se inicializó por completo. Necesita crear otra propiedad de cadena para mantener el valor y ponerlo en la label en la function apropiada, como viewWillAppear .

DetailViewController:

 var textValue: String = "" @IBOutlet weak var selectedBundesland: UILabel! override func viewDidLoad() { super.viewDidLoad() selectedBundesland.text = textValue } 

TableViewController:

  if (segue.identifier == "BackToCalculator") { var vc:FirstViewController = segue.destinationViewController as FirstViewController vc.textValue = "Test" } 

Recientemente tuve este problema. El problema era que había arrastrado el segue desde un object específico de mi controller de vista actual al controller de vista de destino; no hagas esto si quieres pasar valores.

En cambio, arrástrelo desde el bloque amarillo en la parte superior de la window hasta el controller de vista de destino. Luego nombra el segue apropiadamente.

Luego use if (segue.identifier == "BackToCalculator") para asignar el valor tal como está actualmente. ¡Todo debería funcionar!

Acabo de tener el mismo problema, lo solucioné definiendo una cadena que no está conectada a una toma de stream en el nuevo controller de vista y que se refiere a ella en el método prepareForSegue (), en el nuevo VC hice la toma de label para tomar la valor de la cadena no conectada en el método viewDidLoad ().

Aclamaciones

Si bien la solución correcta es almacenar el text y adjuntarlo a la label más adelante en viewDidLoad o algo así, para las testings que se proponen, puede evitar el problema al forzar que el viewDidLoad compile a sí mismo desde el guión gráfico llamando a su propiedad de view como:

 override func prepare(for segue: UIStoryboardSegue, sender: Any?){ if (segue.identifier == "TestViewController") { var vc:FirstViewController = segue.destination as! TestViewController print(vc.view) vc.testLabel.text = "Hello World!" } } 

hecho para Swift 3.0 con amor