0

我在视图 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 后才会填充)。感谢您的任何建议!

4

2 回答 2

2

但是,当我使用模式连接返回查看 1 时,标签从未更新

这可能有两个可能的原因。

  1. 你这样说:

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

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

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

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

于 2013-05-07T01:00:00.007 回答
1

尝试使用NSNotificationCenter:) 注册一个观察者应该在哪里完成更新,并在完成更改的地方发出通知。查看本教程以了解 regestration 和 firering ;)

于 2013-05-07T01:02:03.133 回答