Ios 点击后退按钮后,通过segue传递的数据丢失

Ios 点击后退按钮后,通过segue传递的数据丢失,ios,iphone,swift,view,segue,Ios,Iphone,Swift,View,Segue,我有两个视图控制器A和B,一个通过下一个按钮从A到B(类型:显示)的顺序,一个通过后退按钮从B到A(类型:显示)的顺序。我正在将一些数据通过segue A传递到B。如果我只需从控制器A点击next并转到控制器B,数据将正确显示 然而,如果我点击下一步,转到控制器B,然后点击返回,再回到A,然后再次点击下一步,它就不起作用了。你知道这是怎么回事吗?对不起,我的语言很混乱 听起来你的“B到A”是错误的,你使用的是导航堆栈,所以你只能在向前移动时推动(显示)。后退时,应从顶部弹出(关闭) 如果你继续推

我有两个视图控制器A和B,一个通过下一个按钮从A到B(类型:显示)的顺序,一个通过后退按钮从B到A(类型:显示)的顺序。我正在将一些数据通过segue A传递到B。如果我只需从控制器A点击next并转到控制器B,数据将正确显示

然而,如果我点击下一步,转到控制器B,然后点击返回,再回到A,然后再次点击下一步,它就不起作用了。你知道这是怎么回事吗?对不起,我的语言很混乱

听起来你的“B到A”是错误的,你使用的是导航堆栈,所以你只能在向前移动时推动(显示)。后退时,应从顶部弹出(关闭)

如果你继续推,应用程序将继续在内存中放置越来越多的ViewController,这是不好的

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


简言之:(A到B:键入-显示)(B到A:关闭当前的ViewController)

我同意用户2877496的观点,即您不应该使用常规的顺序从B返回到A,因为每次都会将“A”添加到堆栈中。 我只是想补充一点,消除B并返回A的一种方法是使用一个展开序列。 苹果的文档很好地涵盖了这一点
您解决了这个问题吗?我的猜测是,您将要执行的内容放入viewDidLoad(它在应用程序启动时只运行一次)中,并且它需要在viewDidLoad中显示,因此每次返回主视图控制器时都会调用它。如果需要进一步帮助,请提供这些方法的代码

您的数据是否存储在控制器a的某个属性中,并通过
prepareforsgue
传递给B?我使用了segues并简单地使用了用户默认值来保存数据。非常好!祝贺你解决了自己的问题。你应该把它写下来作为回答并接受它。