在视图之间来回切换时保留一个值

Posted

技术标签:

【中文标题】在视图之间来回切换时保留一个值【英文标题】:Retaining a value when switching back and forth between views 【发布时间】:2011-10-31 19:12:55 【问题描述】:

我设置了两个视图:ViewControllerOne 和 ViewControllerTwo。 在我的 ViewControllerTwo 中,我在文本字段中输入了一个数值变量 (dataValue),稍后我将其用作计算中的浮点值。

用户可以移动到另一个类视图(ViewControllerOne),但是当他们返回到 ViewControllerTwo 时,他们在文本字段中输入的变量并没有保留,而是返回到我在 ViewControllerTwo.m 文件中定义的默认值。

如何让 ViewControllerTwo 记住我的 dataValue?

我已经@synthesized 我的 dataValueTextField 并在 ViewControllerTwo.m 中定义了我的默认 dataValue:

@synthesize dataValueTextField;
float dataValue = 1.00;

然后,稍后,我将 dataValueTextField 转换为浮点值:

float textFieldData = [dataValueTextField.text floatValue];
dataValue = textFieldData;

但当我来回切换视图时,它永远不会记住 dataValue。我需要向我的 viewWillDisappear 添加一些内容,还是需要向我的 viewWillDisappear 或 ViewWillAppear 方法添加一些内容? 任何帮助,将不胜感激。我一直在抓住稻草尝试不同的事情,但无济于事。 谢谢。

【问题讨论】:

【参考方案1】:

是否有可能当您切换视图时,实际上每次都会创建一个新的视图控制器实例?这可能解释了将值重置为默认值的原因。另一种可能性是您有代码将其设置为从事件回调调用的默认值,该事件回调在视图出现时触发。您可以尝试注销所有事件处理程序并查看在视图之间切换时调用了什么。

【讨论】:

感谢您的建议。我不认为是这样(我不确定我什至不知道如何创建视图控制器的新实例),但我会再次检查我的代码。非常感谢您的回复!【参考方案2】:

如果您收到内存警告,则视图可能会被卸载,然后在您返回时重新加载,从而导致再次调用 viewDidLoad。这将导致您在 UITextField 中的值被重置。

【讨论】:

【参考方案3】:

dataValue 是一个浮点数,这意味着它是一个基元。原语不会保留,并且在每个方法结束时都会丢失。从你如何声明 dataValue 来看,它是一个单例吗?我不是 100% 了解当您切换视图时如何处理单例的,如果它们被释放或被保留。

也许最好将 dataValue 变成一个实例变量?就像你对 dataValueTextField 所做的那样。

【讨论】:

我会试试这个。希望它有效,我在我的智慧结束。谢谢

以上是关于在视图之间来回切换时保留一个值的主要内容,如果未能解决你的问题,请参考以下文章

在视图控制器之间来回切换

在视图控制器之间切换时保留按钮状态

切换视图控制器时如何保留 UIDatePicker 和 UITextField 值?

在两个视图控制器之间展开 Segue 来回 Swift

切换视图时标签栏丢失

来回切换时锁定的 ViewController 方向中断