1

当我使用这个设置标签时

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 方法时才会被设置

4

4 回答 4

3

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

dispatch_async(dispatch_get_main_queue(), ^{
    self.versionLbl.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"version"];
});
于 2013-04-11T12:27:33.937 回答
0

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

于 2013-04-11T13:05:37.073 回答
0

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

于 2013-04-11T13:07:54.477 回答
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];
于 2013-04-11T12:13:33.193 回答