在我最近的项目中,我使用presentviewController来组织视图切换。但是有一个奇怪的问题。
首先我在git hub上编写了一个演示:test present view。希望它能让问题更容易理解。
其次,我展示了我在演示中所做的事情: 1)根视图控制器是T1RootViewController,它有一个属性:
@property (strong, nonatomic) T1TopViewController1 *top1VC;
加载时,它将T1TopViewController1添加为其唯一的子视图:
self.top1VC = [[T1TopViewController1 alloc] initWithNibName:@"T1TopView1" bundle:nil];
[self.view addSubview:self.top1VC.view];
2)T1TopViewController1有一个属性:
@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模拟器或设备上,它会崩溃,并带有日志:
test [699:c07] * - [T1TopViewController2 isKindOfClass:]:发送到解除分配的实例0x75ade30的消息
我真的不知道我的代码有什么问题,以及如何修复它。我会非常感谢任何帮助。
P.S。 dev环境是mac os x 10.8.4,xcode 4.6.3。该项目启用了ARC。
答案 0 :(得分:0)
我不知道为什么你的代码不起作用。但我找到了一种方法来实现您在测试项目中想要做的事情。如果您将T1TopViewController3
中按钮的操作更改为
- (IBAction)backBtn_onTouchUpInside:(id)sender
{
UIViewController *presentingViewController = self.presentingViewController;
[self dismissViewControllerAnimated:NO completion:^{
[presentingViewController dismissViewControllerAnimated:NO completion:nil];
}];
}
它应该有用。
答案 1 :(得分:0)
我运行你的应用程序,我看到一些奇怪的东西,你有一个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的
现在您可以根据需要更改控制器。