19

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

生成的警告是警告:

在演示或关闭过程中尝试从视图控制器 < UINavigationController: 0x1ed91620 > 关闭!

有什么线索吗?

谢谢

4

5 回答 5

28

我意识到这是一个迟到的答案,但也许这会帮助其他人寻找解决方案,这就是我所做的:

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

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

于 2012-10-25T11:59:59.870 回答
14

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

-(IBAction)backToMap
{
    if (![self.presentedViewController isBeingDismissed]) {
        [self dismissViewControllerAnimated:YES completion:^{}];
    }
}
于 2013-01-17T23:26:55.807 回答
0

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

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

-(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];
    }
    :
}

嘿presto,没有更多的错误!

于 2013-05-14T19:31:54.983 回答
0

针对iOS6,这对我有用:

if (![self.presentedViewController isBeingDismissed]) 
    [self.presentedViewController dismissViewControllerAnimated:YES
                                                     completion:nil];
于 2013-08-24T11:55:40.427 回答
0

完成dismiss方法后,您可以做任何您想做的事情:

-(IBAction)backToMap
{
    [self dismissViewControllerAnimated:YES
                             completion:^{
                                 //Do something here
                             }];
}
于 2013-10-24T17:35:38.827 回答