尝试执行segue时,iOS应用程序会崩溃

时间:2014-04-07 18:55:11

标签: ios iphone objective-c

我有一个子视图控制器,我从我的一个视图设置,如下所示:

UIViewController *viewController = [[CCouponDetailViewController alloc] init];
[self addChildViewController:viewController];
[self.view addSubview:viewController.view];
[viewController didMoveToParentViewController:self];

我试图从子视图控制器执行一个segue并且它崩溃了应用程序,我不知道为什么。我有一个从子视图到具有正确标识符的预期视图的segue,并且我还有一个从父视图到具有相同标识符的预期视图的segue(我不确定它需要哪一个来自)。

然而,每次遇到此行时应用程序都会崩溃:

[self performSegueWithIdentifier:@"toConfirmPage" sender:button];

我也尝试创建父变量并将其设置为父视图控制器,然后尝试使用segue,如下所示:

UIViewController *parent = self.parentViewController;
[parent performSegueWithIdentifier:@"toConfirmPage" sender:button];

我发现这并没有让应用程序崩溃,但也没有执行segue。我不确定需要做些什么来让segue工作,任何想法?谢谢!

2 个答案:

答案 0 :(得分:0)

[由OP澄清后编辑] 总结一下我现在对此的理解。
你有一个视图控制器' A'你已经添加了一个子视图控制器' B'至。 用户单击子VC(A)视图中的按钮。 您从子VC(A)执行segue,这将导致您想要呈现的新视图而不是父级' A'。

首先,父母VC' A'正确实现容器视图方法(请参阅UIControllerView文档中的'管理自定义容器中的子视图控制器)。除非你这样做,否则你不应该嵌套VC。

其次,您应该在要消失的VC上调用performSegue,在这种情况下,它是父VC' A'。如果它不起作用,请检查您的变量' parent'不是零。

第三个选项是在异常上设置断点(在断点列表中添加异常)。这将在发生异常的位置为您提供堆栈回溯。

希望这会有所帮助 戈登

答案 1 :(得分:0)

如果未将“toConfirmPage”设置为子控制器的属性中的标识符,应用程序将崩溃。

您还需要替换[self.view addSubview:viewController.view];

[self.view addSubview:self.currentClientView];

查看Apple Doc on Custom Containers

最后但并非最不重要的是,请发布崩溃日志。使用Pastebin来提供日志。我认为你的崩溃日志也可能告诉你出了什么问题。