使用此
设置标签时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>
答案 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];