收到通知后,UILabel文本不会更新

时间:2013-04-11 11:46:42

标签: iphone ios objective-c

使用此

设置标签时
self.versionLbl.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"version"];

viewDidLoad方法中,它在视图加载时起作用,但我也想在收到通知时设置标签。

- (void)receiveNotification:(NSNotification *) notification
{
  if ([[notification name] isEqualToString:@"versionNotification"]){
    NSLog (@"Successfully received the notification!");
    self.versionLbl.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"version"];
  }
}

字符串"Successfully received the notification!"被打印出来,但标签不会被字符串更新/设置,除非我再次重新加载视图并调用viewDidLoad方法。

修改

我发现它与通知无关,当我将self.versionLbl.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"version"];放在另一个函数中时,它不会被设置...它只会在我将它放入viewDidLoad方法时设置< / p>

4 个答案:

答案 0 :(得分:3)

确保您的标签不是nil并且您正在主线程中调用UIKit方法。你可以试试这个:

dispatch_async(dispatch_get_main_queue(), ^{
    self.versionLbl.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"version"];
});

答案 1 :(得分:0)

首先确保[[NSUserDefaults standardUserDefaults] objectForKey:@"version"];中存储的对象实际上是NSString对象。

如果没有,你有几种选择:

self.versionLbl.text = [[NSUserDefaults standardUserDefaults] stringForKey:@"version"];

id versionObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"version"];
self.versionLbl.text = [NSString stringWithFormat:@"%@", versionObject];

id versionObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"version"];
self.versionLbl.text = [versionObject stringValue];

答案 2 :(得分:0)

在您的UILabel上查看IBOutlet。您应该将声明的IBOutlet UILabel与带有.xib文件的标签的属性连接起来。

答案 3 :(得分:0)

如果在视图加载后加载,请尝试[myLabel setNeedsDisplay];