Objective c 解除iOS 5中的UINavigationController

Objective c 解除iOS 5中的UINavigationController,objective-c,ios5,Objective C,Ios5,我的问题似乎有点奇怪,我有一个定制的UITarBar,它用UIViewController管理几个UINavigationController,它在UITarBar按钮触碰内部显示这些navigationcontroller,因此,在iOS 5中,我的应用程序正在崩溃,因为dismissModalViewControllerAnimated:方法。。。如果将iOS 5上的dismise方法更改为新方法(dismissViewControllerAnimated:completion:),则不会关

我的问题似乎有点奇怪,我有一个定制的
UITarBar
,它用
UIViewController
管理几个
UINavigationController
,它在
UITarBar
按钮
触碰内部显示这些
navigationcontroller
,因此,在iOS 5中,我的应用程序正在崩溃,因为
dismissModalViewControllerAnimated:
方法。。。如果将iOS 5上的dismise方法更改为新方法(
dismissViewControllerAnimated:completion:
),则不会关闭
NavController
。以下是有关如何更改控制器的一些代码:

- (void) changeController
{   
    if ([self.generalViewController respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) {
        [self.generalViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
    } else {
        [self.generalViewController dismissModalViewControllerAnimated:NO];
    }
    [self.anotherNavController.view addSubview:customTabBar];
if ([self.generalViewController respondsToSelector:@selector(presentViewController:animated:completion:)]) {
        [self.generalViewController presentViewController:anotherNavController animated:NO completion:nil];
    } else {
        [self.generalViewController presentModalViewController:anotherNavController animated:NO];   
    }
一切都在
AppDelegate
中管理。谢谢你的建议


编辑:我在这篇文章中找到了一些东西,做了他做的事情(展示了第一个ViewController动画),然后像我在iOS 5之前做的一样检查新presentViewController的选择器,并且在模拟器上一切正常,但在设备上没有。

我不确定你的第一行,我认为第一行应该是:

 if ([self.generalViewController respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) {
    [self.generalViewController dismissViewControllerAnimated:YES completion:nil];
您在上面的第二行有一个无关的。presentingViewController。我从你上面的评论中看到,你有这样做的理由,但你是否尝试过其他选择

不管怎样,我在迁移到iOS 5时遇到了一个相关的问题,我发现解决方案就是简单地发送disclease命令:

 [self dismissViewControllerAnimated:YES];
我建议你试试。它对我有效,而且在iOS 4.2中运行代码时仍然有效


编辑:更正,我更正的是DismissModalViewController。然而,在这种情况下,我发现只是将消息发送给self而不是针对视图控制器,解决了无法关闭视图的问题,并且在iOS 4和iOS 5中都能工作。。。如果generalViewController响应到te选择器,您的第一个条件测试就可以尝试。

。如果计算结果为true,则此消息将发送到presentingViewController???是的,因为我一直在阅读这是在iOS 5中执行此操作的方法。如果您希望相同的应用程序在iOS 4.x及更早版本上运行,则需要进行检查;如果你只针对iOS 5,就没有必要检查。实际的问题是其他问题,而不是解雇控制器的方式,很难解释,因为它甚至与我最初的问题无关,但谢谢你的意见。