2014-12-03 3 views
-1

Я использовал NSTimer & в конце countDown хочу изменить значение [email protected]"Time Up". Это работает отлично, пока я не переключусь на какой-нибудь другой ViewController, после переключения между viewController (&, возвращающимся к этому viewController), когда countDown завершен. Я получаю идеальные значения. & их нет, но значение View.UILabel.text не меняется, I проверили исключения, исключение не было поднято.View.UILabel.text не меняется после переключения между viewControllers

Мой код:

-(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(), он работает идеально, но мне нужно изменить текст, когда countDown завершен. Я использую UINavigationController & MFSideMenuManager для переключения между ViewControllers.

Мои навигации Код:

-(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]; 

} 

ответ

1

Одно из возможных объяснений является то, что вы не возвращаетесь к исходному контроллеру представления, но на свежий новый экземпляр. Это может легко произойти при использовании стандартного segue вместо разматывания.

Смотрите этот другой вопрос, где произошла аналогичная проблема: Changing label text inside method

+0

Я не использую Segue, вместо этого делаю все программно –

+0

Можете ли вы поместить контрольную точку в свой блок кода «Время» и посмотреть, вообще ли он вызван? Если это произойдет, но вы не увидите отображаемый результат, я думаю, может быть, у вас есть несколько экземпляров. Попробуйте точку останова в инициализаторе View Controller и посмотрите, выполняется ли она несколько раз. – Clafou

+0

Да, я проверил его, поставив точки останова. Блок «Время в пути» называется –

1

Если вы возвращаетесь к просмотру, нажав на кнопку навигации обратно, и вызов этого метода на viewDidLoad, что является проблемой.

ViewDidLoad вызывается только после создания контроллера вида, чтобы вызвать эти методы каждый раз при открытии контроллера, вызывать эти методы в viewWillAppear.

Смежные вопросы