在演示或解散正在进行时试图从视图控制器(UIModalViewController)中解雇

问题描述:

我刚开始研究ios。 我创建了一个Modalviewcontroller (VC1)并提交了另一个modalViewcontroller (VC2)。 VC2上有一个按钮(dismiss),它将不得不关闭两个视图控制器。在演示或解散正在进行时试图从视图控制器(UIModalViewController)中解雇

我知道的方法是拨打电话: -

[self dismissViewControllerAnimated:YES completion:nil]; 
在VC2

然后调用相同的VC1

所以我创建了一个代表,它告诉我,如果被点击VC2解雇。 所以当解雇点: -

我打电话

[self dismissViewControllerAnimated:YES completion:nil]; 

在VC2 那么委托方法带我到VC1 ,我再打电话

[self dismissViewControllerAnimated:YES completion:nil]; 

这种方法是完美的工作,直到我在ios9 中使用应用程序时,我转移到ios7我开始接受警告,VC1没有被解雇。

请让我知道为什么会发生这种情况。

因此,在评论中告诉我的那部分工作。

[self.presentedViewController dismissViewControllerAnimated:YES completion:^{ 
     [self dismissViewControllerAnimated:YES completion:nil]; 
    }]; 
+0

- close方法调用传递给VC 1.在调用它自身dismissModal并在完成参数,也 – Shubhank

+0

根据嗨解雇VC1你自己。presentsViewController dismissViewControllerAnimated:YES完成:^ {self dismissViewControllerAnimated:YES completion:nil]; }];应该工作 –

+0

是的,它应该。 – Shubhank

所以,错误告诉你到底发生了什么。你试图解雇VC1,而你的VC2解雇。通过将dismissViewControllerAnimated到委托方法并不能保证VC1将之前解雇,取而代之的是,你应该在首先解雇打电话给你[self dismissViewControllerAnimated:YES completion:nil];在完成块,所以你的代码看起来像:

[self dismissViewControllerAnimated:YES 
         completion:^{ 
          [self dismissViewControllerAnimated:YES completion:nil]; 
         }]; 
+0

不应该是self.presentedviewcontroller在第一次解雇。 –

+0

你想看多少动画?只能看到一个的方法是在呈现VC1的视图控制器(您希望在解散之后可见的视图控制器)上调用'self dismiss ...'。 – danh

对于斯威夫特人:

在我的情况,我可以通过改变时间一点点解决这个问题(发送方是当前的ViewController):

DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: 
         { 
          sender.performSegue(withIdentifier: "showNextVC", sender: nil) 
         }) 

但是: 这是一个不那么好的workaroun d,只是模糊了背后的真正原因,但至少它表明,那一刻确实发生了一些事情。在我的情况下,我想在发送异步请求之后立即执行segue。问题是,对于我已经显示的每个异步请求(后来被解雇),一个对话框告诉用户正在进行一些操作。

为了改进解决方法并产生更好的解决方案,我确保在拒绝进度警报的回调中执行了segue。

希望这样的背景信息可能会帮助别人找出使用委托的原因:)