【问题标题】:Trouble getting NSUserDefaults storage method to appropriately update text label iOS无法获取 NSUserDefaults 存储方法以正确更新文本标签 iOS
【发布时间】:2013-05-05 23:27:45
【问题描述】:

我正在尝试使用 NSUserDefaults 类来保存一堆文本标签信息。具体来说,我有一个带有按钮和标签的视图。单击按钮时,它将使用“模态”连接将用户带到另一个视图。在第二个视图中,用户使用滑块设置值。单击时,单个按钮会切换回第一个视图,也使用“模态”连接。我想插入一段代码,这样当用户在第二个视图上使用滑块并单击按钮时,它会将第一个视图上的文本标签更新为滑块的值。

这是我在第二个视图的按钮方法下放的代码:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"myValue" forKey@"myKey"];
[defaults synchronize];
_textLabelOnFirstView.text = [defaults stringForKey:@"myKey"];

另外,对于“viewDidLoad”方法下的同一个视图控制器,我放了如下代码:

NSUserDefaults *defaults = [NsUserDefaults standardUserDefaults];
_textLabelOnFirstView.text = [defaults stringsForKey:@myKey"];

但是,会发生这种情况:打开第一个视图后,单击按钮进入第二个视图。在第二个视图中,我将滑块滑动到 100,然后单击按钮。该按钮将我带回第一个视图,但标签从未更新,也没有说 100。如果我关闭应用程序并重新打开,标签仍然是错误的。然而!如果我单击按钮转到第二个视图,然后单击第二个视图的按钮返回到第一个视图(即使没有调整滑块),我现在在文本标签中看到 100 的值。

任何人都可以建议如何更改我的代码,以便在用户从第二个视图转换回第一个视图时立即使用滑块的值更新第一个视图的文本标签?谢谢!

【问题讨论】:

  • 没有看到其余的代码...如果您只更新 viewDidLoad 中的标签,那么当前行为是预期的。 ViewDidLoad 只会被调用一次,您可能正在寻找 viewDidAppear ,每次视图完成到屏幕上的转换时都会调用它。我还建议使用 viewWillAprear,以便在转换发生之前更新值。
  • 非常感谢马特,我不知道这两种方法,这两种方法都解决了我的问题!

标签: ios nsuserdefaults viewcontroller


【解决方案1】:

正如 Matt G 指出的那样,使用 ViewWillAppear 或 ViewDidAppear 而不是 ViewDidLoad 正确地解决了我的问题,每次视图出现时都被调用,而不是它的第一个实例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多