iOS:使用不同视图上的NSUserDefault数据更新文本标签

时间:2013-05-07 00:40:20

标签: ios xcode model-view-controller nsuserdefaults viewdidappear

我在视图1上有一个文本标签和一个按钮。如果我单击按钮,我将通过模态连接来查看2。在此视图中,我输入一个数字并按下按钮。该按钮将数字保存到NSUserDefaults,并尝试更新视图1上的文本标签以反映此数字。

按钮代码:

- (IBAction)returnToView1:(UIButton *)sender {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
defaults setObject:@"myNumber" forKey:@"myKey"];
[defaults synchronize];
_myLabel.text = [defaults stringForKey:@"myKey"];
}

但是,当我使用模态连接返回查看1时,标签永远不会更新。我可以通过添加以下代码来解决这个问题:

-(void)viewDidAppear:(BOOL)animated
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
_myLabel.text = [defaults stringForKey:@"myKey"];
}

问题是,视图1首先加载,然后填充文本字段,因此它看起来不专业。我希望在加载视图之前填充文本标签。我已经尝试将此代码放在此方法中:

(void)viewWillAppear:(BOOL)animated

...但是这也不起作用(由于某种原因,文本字段只会在我关闭应用程序后切换到视图2,第二次按下按钮,然后返回到视图1)。谢谢你的任何建议!

2 个答案:

答案 0 :(得分:2)

  

但是,当我使用模态连接返回查看1时,标签永远不会更新

可能有两个可能的原因。

  1. 你这样说:

    _myLabel.text = [defaults stringForKey:@"myKey"];
    

    好吧,也许_myLabel没有指向视图1中的标签。

  2. 单词“使用模态连接返回视图1”。我希望这并不意味着你正在使用segue。如果是这样的话,那你就是做错了。您正在制作第一个视图控制器的新的,不同的副本。所以现在你有了第一个视图控制器的两个副本,并且你在第一个视图控制器中更改了标签,但是你在它上面显示了第二个标签。

    从模态segue返回的方式不是使用另一个模态segue,而是调用dismissViewControllerAnimated:

答案 1 :(得分:1)

尝试使用NSNotificationCenter :)注册一个观察者,在那里进行更新并发出更改完成的通知。看看这个tutorial进行重新演绎和激活;)