来自self.parentViewController的调用方法什么都不做

时间:2014-08-05 15:28:03

标签: ios objective-c uiviewcontroller

解雇我的第二个视图控制器后,我想在我的第一个视图控制器中调用一个函数。

我现在使用的代码就是这个

firstViewController *fvc = (firstViewController *)self.parentViewController;
[self dismissViewControllerAnimated:YES completion:^ {
    [fvc someMethod];
}];

但似乎永远不会调用该方法,我在方法中添加了一个UIAlertView,因此在调用该方法时也会调用它。

firstViewController *fvc = (firstViewController *)self.parentViewController;
[fvc someMethod];
[self dismissViewControllerAnimated:YES completion:nil];

这完全失败了,我从两个方面都没有任何错误。

3 个答案:

答案 0 :(得分:1)

firstViewController *fvc = (firstViewController *)self.parentViewController;
    [self dismissViewControllerAnimated:YES completion:^ {
    [fvc someMethod];
}];

当呈现self时,你应该使用presentViewController而不是parentViewController

喜欢

firstViewController *fvc = (firstViewController *)self.presentingViewController;
    [self dismissViewControllerAnimated:YES completion:^ {
    [fvc someMethod];
}];

答案 1 :(得分:0)

正如rdurand所说,试着改为呈现ViewController。此外,如果您可以在代码中放入NSLog()以显示方法调用时fvc中的内容,那将非常有用。 rdurand可能是你的fvc指针为nil,所以你在什么都没有调用方法。如果该方法没有激活,那么实际上只有几种可能性:

  1. 您的代码行未执行
  2. 它正在执行,但你在nil对象上调用方法
  3. 该方法正在执行,但是在与您期望的不同的对象上
  4. 设置断点,查看VC指针,确保代码遵循您认为的路径。非常标准的调试任务,除非我遗漏了什么...

答案 2 :(得分:0)

正如我评论的那样,the UIViewController documentation表示:

  

<强> parentViewController

     

收件人的父视图控制器。   (只读)

     

@property(nonatomic, readonly) UIViewController *parentViewController

     

<强>讨论

     

如果收件人是容器视图控制器的子级,   这个属性包含它所包含的视图控制器。如果是   收件人没有父级,此属性中的值为nil。

     

在iOS 5.0之前,如果视图没有父视图控制器,则   正在呈现,呈现视图控制器将被返回

     

在iOS 5上, 此行为不再发生 。相反,使用   presentViewController属性用于访问呈现视图   控制器。

基本上,他们并没有真正删除parentViewController,但是当你的视图控制器没有父视图控制器时,你在iOS 5之前可以预期的行为已经改变了。