无法解雇ViewController?

时间:2013-12-28 17:56:02

标签: ios objective-c

我面临一个奇怪的问题 -

我有一个导航控制器(NV),它显示了根控制器(NVV1)。 NVV1推送另一个名为NVV2的视图控制器。

NVV2提供了一个模态控制器(MV1)。 MV1提供了另一个模态控制器(MV2)。

在MV2中的用户操作中,它通过调用self.presentingViewController dimissViewControllerAnimated来解散自己。解雇后,MV2会调用MV1的方法。 MV1中的该方法执行网络调用,现在(尝试)通过调用self.presentingViewController dismissViewControllerAnimated来显示NVV2并调用{{1}的方法来解雇自己也是。

我面临的问题NVV2并未被解雇。我错过了什么吗?我得到的错误 -

MV1

3 个答案:

答案 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}}不受欢迎。我还没有解决方案。