所以我开始研究一个基本的应用程序并遇到了一个问题。用户被带到第一个视图控制器,要求他们输入两个团队名称,然后按开始按钮(执行第二个视图控制器的segue)。在第二个视图控制器上有两个标签(名为homeIdentifier和awayIdentifier),我希望第二个视图控制器上的标签更新为用户在第一个视图控制器上放置的名称。我认为这很简单,但遇到了问题;它说“致命错误:在解开一个Optional值时意外地发现了nil (lldb)“它也用红色表示”线程1 EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP子代码= 0x0)“
我该怎么做?开始按钮设置为已经执行到第二个视图控制器的segue,所以我不知道该过程是否出现问题。我已经尝试了我在这里看到的建议,但似乎没有用(我不知道是不是因为我使用的是swift 2,或者因为我正在传输2个变量等)。
答案 0 :(得分:1)
我不认为运送两个variables
是问题所在。只要确保你只执行两个变量的segue,其中一个变量不等于nil。确保在第二个view controller
中创建两个变量,因为您需要将数据从第一个view controller
传输到第二个view controller
中的变量。要在swift 2中传递数据,我会使用prepare for segue method
。您还必须在属性检查器中为从第一个view controller
到第二个view controller
带您的segue设置和ID。
这是第一个视图控制器.swift文件
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "segueIdentifier") {
// make an instance of the second view controller
var detailVC = segue!.destinationViewController as DetailViewController;
detailVC.variable1 = "\(firstViewControllerVariable)"
detailVC.variable2 = "\(secondViewControllerVariable)"
}
}
这是你的第二个视图控制器.swift文件应由
组成还要确保所有插座都正确链接
导入UIKit
class secondViewController:UIViewController {
var variable1: String = String()
var variable2: String = String()
override func viewDidLoad() {
super.viewDidLoad()
homeIdentifier.text = variable1
awayIdentifier.text = variable2
}
}
希望这有帮助!
答案 1 :(得分:0)
FirstVC
let sc=self.storyboard?.instantiateViewControllerWithIdentifier("SecondVC")as! SecondVC
sc.str1="Pass Text"
self.navigationController?.pushViewController(sc, animated:true)
SecondVC
class ViewDetails: UIViewController
{
var str1:String!
override func viewDidLoad()
{
super.viewDidLoad()
print(str1)
// Do any additional setup after loading the view.
}
}