解雇我的第二个视图控制器后,我想在我的第一个视图控制器中调用一个函数。
我现在使用的代码就是这个
firstViewController *fvc = (firstViewController *)self.parentViewController;
[self dismissViewControllerAnimated:YES completion:^ {
[fvc someMethod];
}];
但似乎永远不会调用该方法,我在方法中添加了一个UIAlertView,因此在调用该方法时也会调用它。
firstViewController *fvc = (firstViewController *)self.parentViewController;
[fvc someMethod];
[self dismissViewControllerAnimated:YES completion:nil];
这完全失败了,我从两个方面都没有任何错误。
答案 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,所以你在什么都没有调用方法。如果该方法没有激活,那么实际上只有几种可能性:
设置断点,查看VC指针,确保代码遵循您认为的路径。非常标准的调试任务,除非我遗漏了什么...
答案 2 :(得分:0)
正如我评论的那样,the UIViewController documentation表示:
<强> parentViewController 强>
收件人的父视图控制器。 (只读)
@property(nonatomic, readonly) UIViewController *parentViewController
<强>讨论强>
如果收件人是容器视图控制器的子级, 这个属性包含它所包含的视图控制器。如果是 收件人没有父级,此属性中的值为nil。
在iOS 5.0之前,如果视图没有父视图控制器,则 正在呈现,呈现视图控制器将被返回。
在iOS 5上, 此行为不再发生 。相反,使用 presentViewController属性用于访问呈现视图 控制器。
基本上,他们并没有真正删除parentViewController
,但是当你的视图控制器没有父视图控制器时,你在iOS 5之前可以预期的行为已经改变了。