我正在使用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>正在进行演示或解雇!
关于那个的任何线索?
由于
答案 0 :(得分:28)
我意识到这是一个迟到的答案,但也许这会帮助其他人寻找解决方案,这就是我所做的:
-(IBAction)backToMap
{
if (![[self modalViewController] isBeingDismissed])
[self dismissModalViewControllerAnimated:YES];
}
对我来说,我发现这行代码被多次调用,我无法找到原因,所以这是最容易修复的。
答案 1 :(得分:14)
感谢JDx让我走上正轨。我对其进行了调整以形成此解决方案,该解决方案将在不使用iOS 6中弃用的功能的情况下删除警告:
-(IBAction)backToMap
{
if (![self.presentedViewController isBeingDismissed]) {
[self dismissViewControllerAnimated:YES completion:^{}];
}
}
答案 2 :(得分: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,没有更多的错误!
答案 3 :(得分:0)
针对iOS6,这对我有用:
if (![self.presentedViewController isBeingDismissed])
[self.presentedViewController dismissViewControllerAnimated:YES
completion:nil];
答案 4 :(得分:0)
完成解雇方法后,你可以做任何你想做的事情:
-(IBAction)backToMap
{
[self dismissViewControllerAnimated:YES
completion:^{
//Do something here
}];
}