我试图做一些我认为很简单的事情,但我一直在努力。我做了很多搜索,但我找不到的正是我想要做的。
我试图将一个字符串从一个VC传递到下一个VC,并使用委托更改其上的标签。我遇到的问题是,由于某种原因,代表以零的身份出现。(我收到此错误:线程1:致命错误:在展开一个可选值时意外地发现为零)下面是我的代码的一些图像,以帮助您理解我所写的东西
第一个VC代码:
@IBAction func nextBtn(_ sender: Any) {
let newWorkoutVC = storyboard?.instantiateViewController(withIdentifier: "NewWorkoutVC") as! NewWorkoutVC
if workoutNameTextField.text != ""{
let workoutName = workoutNameTextField.text!
nameDelegate.transferText(name: workoutName) //error appears on this line
present(newWorkoutVC, animated: true, completion: nil)
} else {
}
}第二,VC具有正在实例化的委托视图,因为它应该在VC即将加载时发生。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let workoutNameVC = storyboard?.instantiateViewController(withIdentifier: "WorkoutNameVC") as! WorkoutNameVC
workoutNameVC.nameDelegate = self这是我的扩展,使第二个VC符合我的代表。
extension NewWorkoutVC: WorkoutNameDelegate{
func transferText(name: String!) {
workoutNameLabel.text = name
}发布于 2018-12-19 03:15:54
您有向后的协议/委托模式。
如果第一VC要实例化并呈现第二VC ( NewWorkoutVC),则不需要“委托”将数据从第一VC移动到第二VC。此刻你说
let newWorkoutVC = storyboard?.instantiateViewController(
withIdentifier: "NewWorkoutVC") as! NewWorkoutVC..。第一VC具有对第二VC的引用,并且可以在呈现它之前立即设置它的任何属性值。
(然而,第一个VC不能试图触摸第二个VC的任何接口。相反,它应该设置一个简单的属性值,让第二个VC获取该属性值并处理它自己的接口,通常是在它自己的viewDidLoad中)。
那么委托/协议模式的目的是什么呢?这是为了防止第二个VC以后需要将信息传回给第一个VC!为了实现这一点,第一个VC还将在我刚才讨论的时候将第二个VC的delegate属性设置为self (即第一个VC),这样第二个VC就知道如何调用第一个VC了。在委托协议模式中:
self的引用)是第二个VC如何知道其委托是谁的。发布于 2018-12-19 03:13:18
要将数据传递给要呈现的视图控制器,不使用委托。当您希望将数据从VC A传递给呈现A的VC时,通常使用委托。
在这里,您可以直接设置属性,因为您已经获得了实例(newWorkoutVC):
let newWorkoutVC = storyboard?.instantiateViewController(withIdentifier: "NewWorkoutVC") as! NewWorkoutVC
if workoutNameTextField.text != ""{
let workoutName = workoutNameTextField.text!
newWorkoutVC.workoutName = workoutName
present(newWorkoutVC, animated: true, completion: nil)
}其中workoutName在NewWorkoutVC中定义如下:
var workoutName: String!
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated: animated)
workoutNameLabel.text = workoutName
}https://stackoverflow.com/questions/53843938
复制相似问题