Как обновить UILabel в приложении DidBecomeActive - PullRequest
0 голосов
/ 19 августа 2011

Мне нужна помощь с обновлением метки через applicationDidBecomeActive. Как мой проект структурирован, у меня есть RootViewController. Когда пользователь касается кнопки, новый контроллер представления открывается через presentModalView. Я хочу обновлять метку на этом контроллере представления каждый раз, когда приложение становится активным. Это мой код в моем делегате приложения:

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 ]

3 голосов
/ 19 августа 2011

Где вы создали свой 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];
0 голосов
/ 19 августа 2011

В вашем коде приложения вы никогда не используете ViewController1. Он не установлен как rootViewController, ни выдвинут, ни ничего? Я не понимаю, как это может отображать что-либо?

...