0

1st VC --> 2nd VC --> 3rd VC 然后,从 1st VC <-- 3rd VC 弹出。

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

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

所以它正确地保存了 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]; 
4

2 回答 2

1

确保在将值保存到NSUserDefaults第三个 VC 后进行同步:

[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

于 2013-04-16T23:35:04.867 回答
1

这不是 NSUserDefaults 的好用处——它不应该是你在应用程序中传递的值的临时保存位置。

您应该使用 unwind segue 来执行此操作。您可以在 prepareForSegue 方法中将数据传回 VC1,就像普通的前向 segue 一样。您还将在 VC1 中拥有一个方法(将 unwind segue 连接到的方法),该方法可用于更新该控制器中的 UI。

于 2013-04-17T01:38:18.127 回答