【问题标题】:Data passed through segue lost after hitting back button点击返回按钮后通过segue的数据丢失
【发布时间】:2017-12-01 04:42:28
【问题描述】:

我有两个视图控制器 A 和 B,以及通过下一个按钮从 A 到 B(类型:显示)的转场和通过后退按钮从 B 到 A(类型:显示)的转场。我正在通过 segue A 将一些数据传递给 B。如果我只是从控制器 A 点按下一步并转到控制器 B,则数据会正确显示。

但是,如果我点击 next 并转到控制器 B 并回击并返回 A 然后再次点击 next,它不起作用。有什么想法吗?对不起,令人困惑的语言。

【问题讨论】:

  • 您的数据是否存储在控制器 A 的属性中,并通过 prepareForSegue 传递给 B?

标签: ios iphone swift view segue


【解决方案1】:

听起来您的“B 到 A”是错误的,您使用的是导航堆栈,因此您应该只在前进时推动(显示)。倒退时应该从顶部弹出(关闭)

如果你继续推送,应用程序将继续在内存中放入越来越多的 ViewController,这很糟糕。

我怀疑这里发生的事情是视图 A 最初有数据并将其传递给视图 B。然后当您按下后退按钮时,它会创建一个视图 A 的新副本,该副本没有数据并显示它而不是原始视图 A。

简而言之:(A to B :type - show) (B to A :dismiss the current ViewController)

【讨论】:

    【解决方案2】:

    我同意 user2877496 的观点,因为您不应该使用常规的 segue 从 B 返回到 A,因为您每次都会将“A”添加到堆栈中。 我只是想添加一个解除 B 并返回 A 的方法是使用 Unwind Segue。 Apple 文档很好地涵盖了这一点 https://developer.apple.com/library/content/technotes/tn2298/_index.html

    【讨论】:

      【解决方案3】:

      你解决了吗?我的猜测是你把要执行的东西放在 viewDidLoad 中(它只在你的应用程序启动时运行一次),它需要在 viewWillAppear 中,所以每次返回主视图控制器时都会调用它。如果您需要进一步的帮助,请提供这些方法的代码。

      【讨论】:

      • 我在 segues 上工作,只是使用用户默认值来保存数据。
      • 太棒了!恭喜您解决了自己的问题。你应该把它写下来作为答案并接受它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多