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

问题描述:

我正在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]; 
} 

模态控制器节目但解聘生成一​​个警告: 在该控制器I创建模式视图这样。 的此控制器解雇方法是:生成

-(IBAction)backToMap 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

的警告警告:

尝试从视图控制器< UINavigationController的驳回:0x1ed91620>而呈现或驳回正在进行!

有关于此的任何线索?

感谢

+0

相关 - HTTP://计算器。 com/questions/1412021/iphone-crashing-when-presenting-modal-view-controller – ChrisF

我意识到这是一个迟到的答案,但也许这将帮助别人寻找一个解决方案,这一点,这里是我做过什么:

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

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

+6

我也遇到了这个问题。可能发生的情况是您的'dimissModalViewControllerAnimated:'调用可能放置在一个回调(IBAction)方法中,该方法通过点击模态视图上的取消按钮(直接或间接)触发 - 已经处理解除模态视图。所以这个'dismissModalViewControllerAnimated:'可能是重复的,可以删除。 – smileyborg

+1

我有一个类似的问题,但它是由一个viewController被呈现,然后几乎立即被解雇(所以解雇是在目前的动画)。所以我不得不检查'isBeingPresented'。 – Olie

+0

这很奇怪。我认为@smileyborg是一些东西。但我不明白为什么它会自动消失?我所做的只是放松行动,我不需要直接解雇它? – huggie

感谢JDx让我走上正轨。我适应它形成这个解决方案,这将删除警告,而不使用那些弃用iOS 6的功能:

-(IBAction)backToMap 
{ 
    if (![self.presentedViewController isBeingDismissed]) { 
     [self dismissViewControllerAnimated:YES 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]; 

你可以做任何你解雇法的完成情况作为后想:

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