第一个VC - >第二个VC - >第三个VC然后从第一个VC < - 第三个VC弹出。

在第三个VC上选择的单元格文本存储在NSUserDefaults中,我使用该文本填充第一个VC上的UIButton文本。

问题是UIButton中的文本没有刷新/更改它从第3个VC弹出回第一个VC。 仅当我停止应用程序然后重新运行(在XCode Simulator中)时才会刷新文本。

因此它正确地保存了NSUserDefaults中的文本,但是当它弹回第一个VC时,不知何故UIButton没有刷新。

当我回到第一个VC时,有关如何让UIButton刷新的任何帮助?

-EDIT-第一个VC的代码片段:

// Grab text from defaults
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *teamNameOne = [defaults objectForKey:@"teamName1"];
// Set button Title
[buttonOne setTitle:teamNameOne forState:UIControlStateNormal]; 

===============>>#1 票数:1 已采纳

确保在将值保存到第三个VC中的NSUserDefaults之后,同步:

[defaults synchronize];

这会使用最近设置的值更新商店。

还有三件要检查的事情:

  1. 一旦第一个VC加载完毕,确保您设置标题的按钮实际上处于正常控制状态。

  2. 确保在第一个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]; } 
  3. 确保在弹出第一个VC之前填充NSUserDefaults存储。

这是我刚刚构建的项目,可以满足您的需求(非常简单的项目): https//dl.dropboxusercontent.com/u/3660978/SO_ViewControllerTransition.zip

===============>>#2 票数:1

对于NSUserDefaults来说,这不是一个好用的 - 它并不意味着你在应用程序中传递的值的临时存放位置。

你应该通过展开segue来做到这一点。 您可以在prepareForSegue方法中将数据传递回VC1,就像您正常的前向segue一样。 您还将在VC1中使用一个方法(将unwind segue连接到的方法),该方法可用于更新该控制器中的UI。

  ask by Realinstomp translate from so

未解决问题?本站智能推荐:

关注微信公众号