当我展开第二个视图控制器时,第一个视图控制器中的所有变量都为空

时间:2018-10-05 12:17:23

标签: ios swift uiviewcontroller unwind-segue

我正在研究具有多个视图控制器的项目,其中一个视图控制器具有多个文本字段和一个按钮,单击该按钮会将您带到另一个具有地图视图的视图控制器。当用户在地图上选择一个位置并随后尝试返回到第一个视图控制器时,先前填充的文本字段为空。

如何返回原始视图控制器,找到仍保留在segue最初输入的相同值的文本字段和选择器视图。

在这里我如何选择第二个VC

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "toOnlyMap" {
        let distenation = segue.destination as? onlyMapVC
        distenation?.latitude = latitude
        distenation?.longitude = longitude
    }
}

@IBAction func toMapClicked(_ sender: UIButton) {
    performSegue(withIdentifier: "toOnlyMap", sender: self)
}

在这里,我如何释放第二个VC

@IBAction func unwindToAdd(_ sender:UIStoryboardSegue) {

   if latitude == 0.0 || longitude == 0.0 {
      Helper.showAlert("Error", message: "you did not choose any place click back to dismiss this page", VC: self)
   } else {
      performSegue(withIdentifier: "backFromMap", sender: self)
   }
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "backFromMap" {
        let destination = segue.destination as? addNotificationVC
        destination?.latitude = latitude
        destination?.longitude = longitude
        destination?.color = "Ggreen"
        destination?.theHint = "you have choose the location"
    }
}

2 个答案:

答案 0 :(得分:0)

问题在于,您称呼“放松”的经历实际上不是不是。您正在制作一个完整的 new 第一个VC,并将其堆积在现有的第二个VC和现有的第一个VC之上。这将导致许多问题,例如内存浪费。因此,新的VC从空文本字段开始(因为它是新文本)。但这只是更深层问题的征兆!同时,旧的VC仍然坐在那里,并带有“填充的文本字段”,该字段隐藏在其他一个视图控制器及其视图之后,而不是一个。

通过执行错误的“展开”,然后查看View Debugger,可以轻松确认这一点。您实际上会在层次结构中看到第一个VC的两个副本。

另一种证明是在第一个VC中登录viewDidLoad。如果您的“展开”序列导致viewDidLoad被调用,则它不是展开序列-您正在创建新的第一个VC。

答案 1 :(得分:-1)

很高兴看到新人加入该领域。我建议您阅读一下“ MVC”,它代表Model-View-Controller。您存在的问题是因为没有任何模型。您只有一堆视图和几个控制器。

这些“许多文本字段”代表什么?它是有关用户的信息,还是相机元数据或其他全部信息?在视图控制器中创建一个模型,并在用户输入信息时将其填写。

您似乎在第二个视图控制器中有一个排序模型:latitudelongitude,但是在第一个VC中没有。