在 Swift 2 中从视图控制器传输数据
Transport Data from View Controllers in Swift 2
所以我开始开发一个基本的应用程序,运行 遇到了一个问题。用户被带到第一个视图控制器,在那里他们被要求输入两个团队名称,然后按下开始按钮(它执行到第二个视图控制器的 segue)。在第二个视图控制器上有两个标签(名为 homeIdentifier 和 awayIdentifier ),我希望第二个视图控制器上的标签更新为用户在第一个视图控制器上输入的名称。我以为这很简单,但是 运行 变成了一个问题;它说“致命错误:在展开可选值时意外发现 nil
(lldb)" 它也用红色表示 "Thread 1 EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP subcode=0x0)"
我该怎么做?开始按钮已设置为对第二个视图控制器执行 segue,所以我不知道该过程是否出了问题。我已经尝试了我在这里看到的建议,但似乎没有用(我不知道是因为我使用的是 swift 2,还是因为我是 t运行sporting 2 个变量等)。
我认为运送两个 variables
不是问题。只需确保您只执行有两个变量且其中一个不等于 nil 的 segue。确保还在第二个 view controller
中创建两个变量,因为您需要将数据从第一个 view controller
传输到第二个 view controller
中的那些变量中。要在 swift 2 中传递数据,我会使用 prepare for segue method
。您还必须在属性检查器中设置和 ID,以便将您从第一个 view controller
带到第二个 view controller
.
这在第一个视图控制器中。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
}
}
希望这对您有所帮助!
第一VC
let sc=self.storyboard?.instantiateViewControllerWithIdentifier("SecondVC")as! SecondVC
sc.str1="Pass Text"
self.navigationController?.pushViewController(sc, animated:true)
第二VC
class ViewDetails: UIViewController
{
var str1:String!
override func viewDidLoad()
{
super.viewDidLoad()
print(str1)
// Do any additional setup after loading the view.
}
}
所以我开始开发一个基本的应用程序,运行 遇到了一个问题。用户被带到第一个视图控制器,在那里他们被要求输入两个团队名称,然后按下开始按钮(它执行到第二个视图控制器的 segue)。在第二个视图控制器上有两个标签(名为 homeIdentifier 和 awayIdentifier ),我希望第二个视图控制器上的标签更新为用户在第一个视图控制器上输入的名称。我以为这很简单,但是 运行 变成了一个问题;它说“致命错误:在展开可选值时意外发现 nil (lldb)" 它也用红色表示 "Thread 1 EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP subcode=0x0)"
我该怎么做?开始按钮已设置为对第二个视图控制器执行 segue,所以我不知道该过程是否出了问题。我已经尝试了我在这里看到的建议,但似乎没有用(我不知道是因为我使用的是 swift 2,还是因为我是 t运行sporting 2 个变量等)。
我认为运送两个 variables
不是问题。只需确保您只执行有两个变量且其中一个不等于 nil 的 segue。确保还在第二个 view controller
中创建两个变量,因为您需要将数据从第一个 view controller
传输到第二个 view controller
中的那些变量中。要在 swift 2 中传递数据,我会使用 prepare for segue method
。您还必须在属性检查器中设置和 ID,以便将您从第一个 view controller
带到第二个 view controller
.
这在第一个视图控制器中。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
}
}
希望这对您有所帮助!
第一VC
let sc=self.storyboard?.instantiateViewControllerWithIdentifier("SecondVC")as! SecondVC
sc.str1="Pass Text"
self.navigationController?.pushViewController(sc, animated:true)
第二VC
class ViewDetails: UIViewController
{
var str1:String!
override func viewDidLoad()
{
super.viewDidLoad()
print(str1)
// Do any additional setup after loading the view.
}
}