我试图弄清楚如何在Swift中解决这个问题,我也遇到了这个错误:“致命错误:在解开一个Optional值时意外地发现了nil”。任何建议表示赞赏。感谢。
来自FirstViewController
func getDatafromSecondViewController(myMessage: String){
println(myMessage)
}
来自SecondViewController
func sendThisDataToFirstViewController() {
let firstViewController = FirstViewController()
firstViewController.getDatafromSecondViewController("Testing")
}
注意:我不能使用prepareForSegue,因为我使用这些文件“class FirstViewController:UIViewController”和“class SecondViewController:NSObject”作为示例。
答案 0 :(得分:1)
如果我没错,我认为通过使用那些你可以将myMessage
打印到控制台,但是当你尝试使用变量时,它不起作用。如果是这种情况,我认为问题如下:
当你让firstViewController = FirstViewController()时,你正在创建一个FirstViewController类型的新视图控制器并命名为firstViewController。它只是创建,所以任何未在其中分配的变量将为nil,因此会抛出此错误。您需要对原始FirstViewController的引用。你需要一个代表来做这件事。
实现您想要做的事情的简单方法如下。 在您转到它之前,在第二个右侧分配您的第一个视图控制器:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if segue.identifier == "yourSegueIdentifierHere" {
let nextViewController = segue.destinationViewController as SecondViewController
nextViewController.myVariable = self.variableToPass
}
}
当然,您需要在视图控制器中存在该变量,以便将其声明为靠近顶部但在类中:
var myVariable: YourTypeHere!