我在视图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)。谢谢你的任何建议!
答案 0 :(得分:2)
但是,当我使用模态连接返回查看1时,标签永远不会更新
可能有两个可能的原因。
你这样说:
_myLabel.text = [defaults stringForKey:@"myKey"];
好吧,也许_myLabel
没有指向视图1中的标签。
单词“使用模态连接返回视图1”。我希望这并不意味着你正在使用segue。如果是这样的话,那你就是做错了。您正在制作第一个视图控制器的新的,不同的副本。所以现在你有了第一个视图控制器的两个副本,并且你在第一个视图控制器中更改了标签,但是你在它上面显示了第二个标签。
从模态segue返回的方式不是使用另一个模态segue,而是调用dismissViewControllerAnimated:
。
答案 1 :(得分:1)
尝试使用NSNotificationCenter
:)注册一个观察者,在那里进行更新并发出更改完成的通知。看看这个tutorial进行重新演绎和激活;)