繁体   English   中英

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

[英]UILabel text doesn't update after receiving notification

当我使用此设置标签时

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"];我发现它与通知无关self.versionLbl.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"version"]; 在另一个函数中没有设置以及...它只在我把它放在viewDidLoad方法时才被设置

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

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

首先确保对象存储在[[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];

在您的UILabel上查看IBOutlet。 您应该使用.xib文件上带有标签的Property声明IBOutlet UILabel。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM