Я использовал NSTimer и в конце обратного отсчета хочу изменить значение View.UILabel.text=@"Time Up"
. Это работает отлично, пока я не переключусь на какой-то другой ViewController, после переключения между viewController (и возвращением к этому viewController), когда завершится обратный отсчет, я получаю идеальные значения, и их значение не равно нулю, но значение View.UILabel.text не меняется, я проверены исключения, исключения не возникают.
Мой код:
-(void) timeInterval
{
appdelegate._UserProfile.totalTime = 30;
UIApplication *app = [UIApplication sharedApplication];
//will allow NSTimer to continue running in background..
UIBackgroundTaskIdentifier bgTask = 0;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
}];
appdelegate._UserProfile.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(countDown) userInfo:nil repeats:YES];
}
-(void) countDown
{
appdelegate._UserProfile.totalTime -= 1;
if(appdelegate._UserProfile.totalTime == 0)
{
[profileView.userPhoneNo setText:@""];
profileView.timeUp.text= @"* Time Up";
}
}
Пожалуйста, любая помощь будет очень признательна. (Я видел много вопросов, но моя проблема не решена)
*Примечание: после переключения, если я изменяю значение метки в ViewWillAppear(), она работает отлично, но мне нужно изменить текст, когда завершится обратный отсчет. Я использую UINavigationController & MFSideMenuManager
для переключения между ViewController.
Мой навигационный код:
-(void) initMyProfile
{
UINavigationController *detailNavigationController = [MFSideMenuManager sharedManager].navigationController;
detailNavigationController.menuState = MFSideMenuStateHidden;
MyProfileViewController_iPhone* detailViewController = [[MyProfileViewController_iPhone alloc] initWithNibName:nil bundle:nil];
detailViewController.title = @"My Profile";
detailNavigationController.viewControllers = [NSArray arrayWithObject:detailViewController];
}
2 ответа
Если вы возвращаетесь к представлению, нажимая кнопку «Назад» и вызывая эти методы в viewDidLoad, это проблема.
ViewDidLoad вызывается только после создания контроллера представления, чтобы вызывать эти методы каждый раз, когда вы открываете контроллер просмотра, вызывайте эти методы в viewWillAppear.
Одно из возможных объяснений состоит в том, что вы возвращаетесь не к исходному контроллеру представления, а к новому новому экземпляру. Это может легко произойти при использовании стандартного перехода вместо перехода с раскруткой.
См. этот другой вопрос, где возникла аналогичная проблема: Изменение текста метки внутри метода
Похожие вопросы
Связанные вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.