我需要帮助更新applicationDidBecomeActive
中的标签。我的项目结构的方式,我有一个RootViewController。当用户触摸按钮时,将通过presentModalView
打开新的视图控制器。我希望每次应用程序变为活动状态时更新此视图控制器上的标签。这是我的app delegate中的代码:
WordList1 *viewController1 = [[WordList1 alloc] initWithNibName:@"WordList1" bundle:nil];
[viewController1 changelabel:counter];
[viewController1 release];
它在我的WordList1视图控制器中调用此函数以每次更新标签:
- (void) changelabel:(int)counter {
NSString *string = [NSString stringWithFormat:@"%d", counter];
label.text = string;
}
当我通过调试器运行时,“counter”和“string”的值正在更新,但标签不会更改值。请帮忙
答案 0 :(得分:3)
您在哪里创建了UILabel
?如果是通过xib文件创建的,请确保已将文件所有者的IBOutlet
连接到正确的标签。如果未连接,则不知道要更新的标签。
编辑: 我相信从AppDelegate更新你的标签是糟糕的代码设计。标签应该真正从视图控制器更新。我的猜测是你将代码放在AppDelegate中,因为这是应用程序进入前台时调用代码的地方。要在应用程序进入前台时从视图控制器更新标签,您可以在视图控制器中设置通知。代码示例:
- (id)init
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(changeLabel:)
name:UIApplicationWillEnterForegroundNotification
object:nil];
return self;
}
这会将视图控制器注册为观察者,以便每次应用程序进入前台时收到通知。这样,您可以在视图控制器中包含此代码,并相应地进行更新。
此外,通过在dealloc方法中添加以下内容,确保在取消分配视图控制器时取消注册观察者:
[[NSNotificationCenter defaultCenter] removeObserver:self];
答案 1 :(得分:0)
在你的appdelegate代码中,你永远不会使用ViewController1。它不是设置为rootViewController,也不是也没有设置?我不明白它是如何显示的?