如何使用NSUserDefaults从不同的视图控制器更新标签

时间:2014-03-08 22:05:33

标签: ios uiviewcontroller label nsuserdefaults ibaction

我试图通过按下不同视图控制器2上的按钮来更新视图控制器1上的标签。我在视图控制器2中有这个IBAction:

- (IBAction)done:(id)sender {

    DropPinVC * vc = [[DropPinVC alloc]init];

    NSString *updatedLabel = [[NSUserDefaults standardUserDefaults] stringForKey:@"Type Location"];

    NSLog(@"Updated Label = %@", updatedLabel);

    vc.TypeLabel.text = updatedLabel;

    [self closeScreen];
}

但是,视图控制器1上的标签不会更新。有人知道这个问题的解决方案吗?

1 个答案:

答案 0 :(得分:2)

vc 是在发布的操作范围内声明的 DropPinVC 类的新实例,并且与您要更新的实例不同。

实现此目的的一种方法是保持指向第一个视图控制器的指针。

为了让 viewController2(vc2)更新 viewController1(vc1)所拥有的 UILabel vc2 需要引用 vc1 ,以便它可以访问标签。

将属性添加到 DropPinVC

类型的 vc2
@property (nonatomic, strong) DropPinVC *vc1Ref;

假设 vc1 分配并初始化 vc2 ,那么在此之后,请指定 vc1Ref 属性。

vc2.vc1Ref = self;

现在,在IBAction中,您的代码现在可以访问正确的实例并更新正确的标签。

- (IBAction)done:(id)sender {

NSString *updatedLabel = [[NSUserDefaults standardUserDefaults] stringForKey:@"Type Location"];

NSLog(@"Updated Label = %@", updatedLabel);

self.vc1Ref.TypeLabel.text = updatedLabel;

[self closeScreen];
}