【问题标题】:when i unwind my second view controller all variables in the first view controller become empty [duplicate]当我展开我的第二个视图控制器时,第一个视图控制器中的所有变量都变为空 [重复]
【发布时间】:2018-10-05 12:17:22
【问题描述】:

我正在处理具有多个视图控制器的项目,其中一个视图控制器具有许多文本字段和一个按钮,当您单击该按钮时,它会将您带到另一个具有地图视图的视图控制器。当用户在地图上选择一个地点,然后尝试返回第一个视图控制器时,之前填充的文本字段为空。

我怎样才能回到原始视图控制器并找到文本字段和选择器视图仍然保留最初在 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"
    }
}

【问题讨论】:

  • 请添加您的代码并删除图片。
  • 如何发布代码?
  • 点击按钮“{ }”。之后你会看到:“在此处输入代码”。
  • 我做了你的建议
  • backFromMap segue 是 unwind segue 吗? IE。您是通过拖动到情节提要中地图场景的“退出”图标来创建它的吗?

标签: ios swift uiviewcontroller unwind-segue


【解决方案1】:

问题在于,您称为“展开”的转场不是实际上是展开。您正在制作一个完整的第一个 VC,将其叠加在现有的第二个 VC 和现有的第一个 VC 之上。这将导致许多问题,例如内存浪费。因此,新的 VC 以空文本字段开始生命(因为它是新的);但这只是一个更深层次问题的症状!与此同时,旧的 VC 仍然坐在那里,它的“填充文本字段”隐藏在不是一个而是两个其他视图控制器及其视图的后面。

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

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

【讨论】:

  • 好的先生,您能帮我在不创建新 VC 的情况下如何放松吗?
  • 是的,我可以,但我不必这样做,因为这里已经讨论过很多次了。例如,请参阅stackoverflow.com/questions/12561735/… 我的角色是回答您的问题,即为什么我的文本字段会丢失其填充值?这是因为它们不是您填充的文本字段;它们是一组新的、不同的文本字段。
【解决方案2】:

很高兴看到新人进入该领域。我建议你阅读一些叫做“MVC”的东西,它代表模型-视图-控制器。您遇到的问题存在,因为您没有任何模型。你只有一堆视图和几个控制器。

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

您的第二个视图控制器中似乎有某种模型:latitudelongitude 但在第一个 VC 中没有。

【讨论】:

  • 绝对兄弟,我都有纬度和经度,但这些都隐藏在第一个 VC 中
  • 人们一直在使用的这个“兄弟”是什么?
  • 这是聊天语言亲爱的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多