2012-06-19 28 views
0

我正在使用两个视图控制器进行应用程序。当我在我的第一个观点工作,我有posibility使用“设置”按钮,并conected到该按钮的方法去另一个观点是这样的:presentModalViewController不起作用?

-(IBAction)Settings:(id)sender{ 

[self presentModalViewController:settingsHandle animated:YES]; 

settingsHandle是第二视图类的一个对象,它是alloceted当第一个视图被加载时。

我的问题开始,而我在第二个视图,我打电话的方法,其中包括NSTimer对象。这个方法在hmmm工作时可以说30秒,但也可以是5分钟,这种方法的结果是在其他视图中调用第三个视图。

当我在第二个视图中等待此功能的结果时,一切正常。结果是我处于第三个视图。

在方法工作期间,我将从第二个视图开始(使用[self dismissModalViewControllerAnimated:YES];)我可以看到该方法已完成(使用NSLOG),但[self presentModalViewController:thirdview animated:YES];不起作用,只是没有任何反应。

这样总结:

等待结果的过程中secodnview(更迭第三种观点上传) 中的firstView等待结果(失败没有任何反应)

而且我的目标是使它发生在第一个视图!

+0

你使用ARC(自动参考计数)?如果是这样,当你的定时器的最后一个引用,可能在你的2.ViewController中消失,定时器将被释放,因此它不会调用任何东西。 – Phlibbo

+0

不,我不使用ARC;/ – user1246957

+0

你的[self presentModalViewController:thirdview animated:YES]的“自我”;自然会成为你的第一个视图控制器,对吗? – Phlibbo

回答

0

您不能提出被解雇的ViewController中的ModalViewController。所以,你需要跟踪可见的ViewController并从那里拨打presentModalViewController。在你的情况下,最简单的解决办法是让你的第一个ViewController如果您在2 ViewController创建的NSTimer这是这样的

- (void)presentViewController:(NSTimer *)timer 
{ 
    if(self.modalViewController == nil) 
     [self presentModalViewController:settingsHandle animated:YES]; 
    else 
     [self.modalViewController presentViewController]; 
} 

NSTimer调用一个方法,当然你需要一个参考第一个ViewController。你可以通过这样的参考

-(IBAction)Settings:(id)sender{ 
    settingsHandle.myParentViewController = self; //You need to create this var in settingsHandle 
    [self presentModalViewController:settingsHandle animated:YES]; 
    //... 
} 
相关问题