我面临一个奇怪的问题 -
我有一个导航控制器(NV
),它显示了根控制器(NVV1
)。 NVV1
推送另一个名为NVV2
的视图控制器。
NVV2
提供了一个模态控制器(MV1
)。 MV1
提供了另一个模态控制器(MV2
)。
在MV2中的用户操作中,它通过调用self.presentingViewController dimissViewControllerAnimated
来解散自己。解雇后,MV2
会调用MV1
的方法。 MV1
中的该方法执行网络调用,现在(尝试)通过调用self.presentingViewController dismissViewControllerAnimated
来显示NVV2
并调用{{1}的方法来解雇自己也是。
我面临的问题NVV2
并未被解雇。我错过了什么吗?我得到的错误 -
MV1
答案 0 :(得分:0)
我认为您的问题是您在dismissViewControllerAnimated
而不是presentingViewController
上拨打self
。通常,这样会很好,但是如果你看一下Discussion section for dismissViewControllerAnimated
一个呈现的视图控制器会自动转发给它呈现视图控制器。
在这种情况下,您可能发现了一个小错误,其中多个呈现的视图控制器在转发消息之前不检查它们是否也是呈现视图控制器。如果您将来电更改为self
,则可能会阻止MV1
将邮件转发至NVV2
。
答案 1 :(得分:0)
好像你试图在MV2被解雇之前解雇MV1视图。在解雇MV2之前尝试添加一点延迟:
[self performSelector: @selector(dismissMV1) withObject:nil afterDelay: 0.1f];
或者更好,您可以尝试使用完成块(在iOS 5.0及更高版本中提供)从 MV2方法调用dismissMV1
方法解雇完成后触发dismissMV1
:
[self.presentingViewController dismissViewControllerAnimated:YES completion: ^{
[self.presentingViewController dismissMV1];
}];
答案 2 :(得分:0)
我通过dismissViewController
上的NVV2
直接调用MV2
来解决了这个问题,[self.presentingViewController.presentingViewController dismissControllerAnimated]
,我调用了MV2
。
这解决了我在这种情况下的问题,因为我想直接从NVV2
转到MV1
。理想情况下,我本来希望转移到MV1
,进行一些网络操作并指示用户NVV2
上正在进行网络操作,但在我的情况下,显示MV2
上也有效细
但最初的问题仍然没有答案 - 如何直接从MV1
转移到NVV2
再转到dimissControllerAnimated
。我认为这可能是一个小错误,因为根据文档,如果你在一个视图上调用NVV2
它也会将消息发送给它的父节点 - 实质上,调用一直到{{1}}不受欢迎。我还没有解决方案。