Ios 涉及presentViewController的崩溃

Ios 涉及presentViewController的崩溃,ios,Ios,在我最近的项目中,我使用presentviewController来组织视图的切换。但有一个奇怪的问题 首先,我在git hub上编写了一个演示:。希望这能使问题更容易理解 其次,我展示了我在演示中所做的: 1) 根视图控制器是T1RootViewController,它具有一个属性: @property (strong, nonatomic) T1TopViewController1 *top1VC; @property (strong, nonatomic) T1TopViewControl

在我最近的项目中,我使用presentviewController来组织视图的切换。但有一个奇怪的问题

首先,我在git hub上编写了一个演示:。希望这能使问题更容易理解

其次,我展示了我在演示中所做的: 1) 根视图控制器是T1RootViewController,它具有一个属性:
@property (strong, nonatomic) T1TopViewController1 *top1VC;
@property (strong, nonatomic) T1TopViewController2 *topVC2;
加载时,它会添加T1TopViewController1作为其唯一子视图:
self.top1VC = [[T1TopViewController1 alloc] initWithNibName:@"T1TopView1" bundle:nil];
[self.view addSubview:self.top1VC.view]; 

2) T1TopViewController1有一个属性:
@property (strong, nonatomic) T1TopViewController1 *top1VC;
@property (strong, nonatomic) T1TopViewController2 *topVC2;
它还有一个按钮,按下时会显示T1TopViewController2:
self.topVC2 = [[T1TopViewController2 alloc] initWithNibName:@"T1TopView2" bundle:nil];
[self presentViewController:self.topVC2 animated:NO completion:nil];

3) T1TopViewController2与T1TopViewController1几乎相同,只是它显示了T1TopViewController3

4) T1TopViewController3有一个按钮,按下后返回显示T1TopViewController1:
UIWindow *rootWin = [[UIApplication sharedApplication] keyWindow];
T1RootViewController *rootVC = (T1RootViewController *)rootWin.rootViewController;
[rootVC.top1VC dismissViewControllerAnimated:NO completion:nil];

然后从T1TopViewController1运行此应用程序,单击每个视图上的按钮,直到出现T1TopViewController3。然后单击T1TopViewController3按钮,这将返回T1TopViewController1。然后再次单击T1TopViewController1上的按钮。现在可能会出现问题:
1) 在ios 5模拟器上,一切正常
2) 在ios 6.1模拟器或设备上,它将崩溃,日志为:
测试[699:c07]*-[T1TopViewController2是类的种类:]:消息发送到解除分配的实例0x75ade30

我真的不知道我的代码出了什么问题,以及如何修复它。我将非常感谢你的帮助


p、 开发环境是MacOSX10.8.4,xcode 4.6.3。该项目启用了ARC。

我不知道为什么您的代码不起作用。但是我已经找到了一种方法来实现您在测试项目中想要做的事情。如果将
T1TopViewController3
中按钮的操作切换到

- (IBAction)backBtn_onTouchUpInside:(id)sender
{
    UIViewController *presentingViewController = self.presentingViewController;
    [self dismissViewControllerAnimated:NO completion:^{
        [presentingViewController dismissViewControllerAnimated:NO completion:nil];
    }];
}

它应该可以工作。

我运行了你的应用程序,在那里我看到了一些奇怪的事情,你有一个UIViewController作为RootViewController,然后初始化另一个UIViewController,并将他的UIView添加到RootViewController的视图中

不管怎样,以下是我所做的:

您可以将AppDelegate中的代码更改为:

 T1TopViewController1 *cont = [[T1TopViewController1 alloc] initWithNibName:@"T1TopView1" bundle:nil];
 self.window.rootViewController = cont;
而不是你所拥有的

以及功能:

- (IBAction)backBtn_onTouchUpInside:(id)sender
{
 UIWindow *rootWin = [[UIApplication sharedApplication] keyWindow];
[rootWin.rootViewController dismissViewControllerAnimated:NO completion:nil];
}
从T1TopViewController3

现在,您可以随意更改控制器