Ios 如何在模式视图关闭时获得精确的PresentingViewController

Ios 如何在模式视图关闭时获得精确的PresentingViewController,ios,objective-c,iphone,segue,uistoryboard,Ios,Objective C,Iphone,Segue,Uistoryboard,我的应用程序导航如下所示: NavigationController-->RootViewController-->Show Segue-->SomeViewController-->(Show Segue)->ParentViewController(带ContainerView) 因此,ParentViewController有一个容器视图。 此容器视图在运行时以编程方式填充,具体取决于用户选择。 因此,视图层次结构基本上如下所示: ParentViewController(带Contain

我的应用程序导航如下所示:

NavigationController-->RootViewController-->Show Segue-->SomeViewController-->(Show Segue)->ParentViewController(带ContainerView)

因此,ParentViewController有一个容器视图。 此容器视图在运行时以编程方式填充,具体取决于用户选择。 因此,视图层次结构基本上如下所示:

ParentViewController(带ContainerView)--(嵌入Segue)-->ContainerViewController--(自定义Segue,用于决定在运行时显示哪个子级)--> FirstChildViewController/SecondChildViewController

现在,当点击SecondChildViewController中的按钮时,我将显示一个模式视图。到目前为止,一切都很好

但是,现在我想更新SecondChildViewController中的数据。我尝试在ModalViewController中这样做:

SecondChildViewController *secondChildVC = (SecondChildViewController *)self.presentingViewController;
[self dismissViewControllerAnimated:YES completion: ^{ [secondChildVC updateList];   }];
但是,我得到了以下错误:

由于未捕获异常而终止应用程序 “NSInvalidArgumentException”,原因:'-[UINavigationController updateList]:发送到实例的无法识别的选择器 0x127e451b0'


如何解决此问题?那么,具体来说,我如何获得“真正”的presentingViewController?我知道这有点奇怪,从用户体验的角度来看,视图上有太多的堆积,但这是客户端想要实现的方式。

我不确定我是否正确理解了您的问题。如果您有一个ViewController a,显示ViewController B,并且如果您希望在B被解除时调用a中的一个方法,则可以将B作为代理

在此处阅读有关协议和代表的更多信息:
我不确定我是否正确理解了你的问题。如果您有一个ViewController a,显示ViewController B,并且如果您希望在B被解除时调用a中的一个方法,则可以将B作为代理

在此处阅读有关协议和代表的更多信息:

很抱歉给您带来了一些困惑,但您几乎完全正确。我知道我可以选择协议/委托机制。但是,这个问题并不罕见。我得到的不是SecondChildViewController实例,而是作为presentingViewController的UINavigationViewController实例。有没有办法找到“真正”的presentingViewController?谢谢你的回复!!请尝试UINavigationViewController.TopViewControllerOne。。。这将给我ParentViewController,并且再次必须查找它的子对象。到目前为止,我已经实现了委托模式。很抱歉出现任何混乱,但您几乎完全正确。我知道我可以选择协议/委托机制。但是,这个问题并不罕见。我得到的不是SecondChildViewController实例,而是作为presentingViewController的UINavigationViewController实例。有没有办法找到“真正”的presentingViewController?谢谢你的回复!!请尝试UINavigationViewController.TopViewControllerOne。。。这将给我ParentViewController,并且再次必须查找它的子对象。到目前为止,我已经实现了委托模式。