我使用过NSTimer&在countDown结束时想要更改View.UILabel.text=@"Time Up"
的值。这是完美的工作,直到我切换到一些其他ViewController,在viewDtroller之间切换(&回到这个viewController)当countDown完成后我得到完美的值&它们不是nil但是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()中更改标签的值,它工作正常,但我需要在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];
}
答案 0 :(得分:1)
一种可能的解释是,您不会回到原始视图控制器,而是回到新的实例。使用标准segue而不是展开segue时很容易发生这种情况。
查看发生类似问题的其他问题:Changing label text inside method
答案 1 :(得分:1)
如果您通过单击后退导航按钮返回视图,并在viewDidLoad上调用此方法,那就是问题。
只有在创建视图控制器后才会调用viewDidLoad,每次查看控制器打开时调用这些方法,在viewWillAppear上调用这些方法。