0

当我单击开始时,appDelegate 中的事件计时器将启动,一段时间后我必须在计时器触发时显示一个视图。

我的问题是调用了计时器触发方法,但导航不推送视图控制器

-(IBAction)fakeCallCaled:(id)sender
{
      NSLog(@"FakeCall");
      fakeCallDesignViewController *fakeCallVC = [[fakeCallDesignViewController alloc]init];
      NSMutableArray *array = [[NSMutableArray alloc]init];
      [array addObjectsFromArray:navController.viewControllers];
      [array addObject:fakeCallVC];
      [navController setViewControllers:array];
      [array release];
      [fakeCallVC release];
}

此方法在委托中

在 firstviewcontroller.m 中

 -(void)eventStarted
 {
        delegate.fakecallTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(fakeCallCaled:) userInfo:nil repeats:NO];
 }

现在5秒后我会在日志中得到“FakeCall”但视图控制器不会改变

我也尝试推入 appdelegate

  -(IBAction)fakeCallCaled:(id)sender
  {
        NSLog(@"FakeCall");
        fakeCallDesignViewController *fakeCallVC = [[fakeCallDesignViewController alloc]init];
        [self.navigationController pushViewController:fakeCallVC animated:NO];
        [fakeCallVC release];
  }

但我得到了同样的结果。

4

2 回答 2

0

为什么要为这样的任务使用计时器,请使用:

[self performSelector:@selector(fakeCallCaled:) withObject:self afterDelay:5];
于 2012-12-22T06:00:35.643 回答
0

您可以为此开始使用块。fakeCallCaled在这种情况下,您根本不需要该方法。只需在您的方法中添加以下代码eventStarted,它应该可以工作。并确保您正在像这样在主线程中进行 UI 工作。

-(void)eventStarted
 {
   double delayInSeconds = 5.0;
   dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
   dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        NSLog(@"FakeCall");
        fakeCallDesignViewController *fakeCallVC = [[fakeCallDesignViewController alloc]init];
        [self.navigationController pushViewController:fakeCallVC animated:NO];
        [fakeCallVC release];
   }); 
}
于 2012-12-22T06:11:15.730 回答