如何在applicationDidBecomeActive中更新UILabel

时间:2011-08-19 16:28:08

标签: iphone uilabel uiapplicationdelegate

我需要帮助更新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”的值正在更新,但标签不会更改值。请帮忙

2 个答案:

答案 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,也不是也没有设置?我不明白它是如何显示的?