Iphone 奇怪的警告解除模态视图控制器

Iphone 奇怪的警告解除模态视图控制器,iphone,ios,cocoa-touch,ios5,ios6,Iphone,Ios,Cocoa Touch,Ios5,Ios6,我在做iOS 6。 我的应用程序有一个带有嵌入式CustomViewController的标准导航控制器。 在该控制器中,我创建了如下模式视图: -(IBAction)presentModalList:(id)sender { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; StationsListViewController *list = [s

我在做iOS 6。 我的应用程序有一个带有嵌入式CustomViewController的标准导航控制器。 在该控制器中,我创建了如下模式视图:

-(IBAction)presentModalList:(id)sender {
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    StationsListViewController *list = [storyboard instantiateViewControllerWithIdentifier:@"StationsListViewController"];
    [list setStationsData: [self.stationsData allValues]];
    [self presentModalViewController:list animated:YES];
}
模态控制器显示完美,但忽略会生成警告。 此控制器中的解除方法为:

-(IBAction)backToMap
{
    [self dismissModalViewControllerAnimated:YES];
}
生成的警告为警告:

当演示或取消正在进行时,尝试从视图控制器取消

有什么线索吗


谢谢

我意识到这是一个迟来的答案,但这可能会帮助其他人寻找解决方案,以下是我所做的:

-(IBAction)backToMap
{
    if (![[self modalViewController] isBeingDismissed])
        [self dismissModalViewControllerAnimated:YES];
}

对我来说,我发现代码行被多次调用,我不知道为什么这是最简单的修复方法。

感谢JDx让我走上了正确的道路。我对其进行了调整以形成此解决方案,该解决方案将在不使用iOS 6中不推荐使用的功能的情况下删除警告:

-(IBAction)backToMap
{
    if (![self.presentedViewController isBeingDismissed]) {
        [self dismissViewControllerAnimated:YES completion:^{}];
    }
}

我发现这种方法不可靠——比如说,五分之一的情况下,我仍然会看到错误

我的解决方案是使用completion块设置一个标志来控制是否可以安全地关闭视图,这样您就不需要检查视图是否正在关闭

-(IBAction)presentModalView:(id)sender {
    :
    self.canDismiss = NO;
    [self presentViewController:aVC animated:YES completion:^{ 
      self.canDismiss = YES; 
     }];
    :
}
在发生解除的代码位中,只需检查标志:

-(void)dismisser {
    :
    if (self.canDismiss) {
      [self dismissViewControllerAnimated:YES completion:nil];
    }
    :
}

嘿,普雷斯托,别再犯错误了

针对iOS6,这对我来说很有用:

if (![self.presentedViewController isBeingDismissed]) 
    [self.presentedViewController dismissViewControllerAnimated:YES
                                                     completion:nil];

完成Disclose方法后,您可以按如下方式执行任何操作:

-(IBAction)backToMap
{
    [self dismissViewControllerAnimated:YES
                             completion:^{
                                 //Do something here
                             }];
}

我也遇到了这个问题。可能发生的情况是,您的
dimissModalViewControllerAnimated:
调用可能放置在回调(iAction)方法中,该方法(直接或间接)通过点击模态视图上的取消按钮触发,该按钮已处理解除模态视图的操作。因此,此
解除ModalViewController激活:
可能是重复的,可以删除。我有类似的问题,但它是由显示的viewController引起的,然后几乎立即解除(因此解除是在当前动画期间)。因此,我必须检查
正在显示
。这很奇怪。我想@smileyborg有什么发现。但我不明白为什么它看起来是自动被解雇的?我所做的只是一个放松的动作,我不需要直接忽略它-