第一个VC - >第二个VC - >第三个VC 然后,弹出来 第一VC< - 3rd VC。
在第三个VC上选择的单元格文本存储在NSUserDefaults中,我使用该文本填充第一个VC上的UIButton文本。
问题是UIButton中的文本没有刷新/更改它会从第3个VC弹回第1个VC。只有在我停止应用程序然后重新运行(在XCode Simulator中)时才会刷新文本。
因此它正确地保存了NSUserDefaults中的文本,但当它弹回第一个VC时,不知何故UIButton不会刷新。
当我回到第一个VC时,如何帮助刷新UIButton?
CNC中 第一个VC的代码片段:
// Grab text from defaults
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *teamNameOne = [defaults objectForKey:@"teamName1"];
// Set button Title
[buttonOne setTitle:teamNameOne forState:UIControlStateNormal];
答案 0 :(得分:1)
确保在第3个VC中将值保存到NSUserDefaults
后,同步:
[defaults synchronize];
使用最近设置的值更新商店。
要检查的其他三件事:
确保在第一个VC加载后,您设置标题的按钮实际上处于正常控制状态。
确保在第一个VC中填充该按钮标题的调用是在viewWillAppear中完成而不是在viewDidLoad中完成的。使用导航控制器时,弹出回已加载的视图时不会调用viewDidLoad。还要确保打电话给超级:
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *buttonTitle = [defaults valueForKey:@"ButtonTitle"];
[self.myButton setTitle:buttonTitle forState:UIControlStateNormal];
}
确保在弹出第一个VC之前填充NSUserDefaults商店。
这是我刚刚构建的项目,可以满足您的需求(非常简单的项目): https://dl.dropboxusercontent.com/u/3660978/SO_ViewControllerTransition.zip
答案 1 :(得分:1)
对于NSUserDefaults来说,这不是一个好用途 - 它并不意味着你在应用程序中传递的值的临时存放位置。
你应该通过展开segue来做到这一点。您可以在prepareForSegue方法中将数据传递回VC1,就像您正常的前向segue一样。你也可以在VC1中找到一个方法(你将unwind segue连接起来的方法),可用于更新该控制器中的UI。