我在使用 Storyboard 的 iOS 项目中遇到导航 Controller 问题。
该项目的主要部分是一个UITabBar。当应用程序第一次加载屏幕 RegisterViewController 时:
当用户点击“注册”按钮时,会发出 HTTP POST 请求,然后在收到响应(JSON 对象)后,屏幕 QuestionnaireViewController 会使用:
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
QuestionnaireViewController *questionnaireViewController = [mainStoryboard instantiateViewControllerWithIdentifier:@"QuestionnaireView"];
[questionnaireViewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[questionnaireViewController setQuestionsAndAnswers:_questionsAndAnswers];
[self presentViewController:questionnaireViewController animated:NO completion:nil];
当用户点击 QuestionnaireViewController 中的单元格时,会向 prepareForSegue:sender 发送一条消息:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
UINavigationController *navigationController = segue.destinationViewController;
AnswersViewController *answersViewController = [[navigationController viewControllers] objectAtIndex:0];
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
NSArray *answers = [[_questionsAndAnswers objectAtIndex:indexPath.row] objectForKey:@"answers"];
[answersViewController setAnswers:answers];
}
此时应用程序崩溃并出现以下错误:
-[AnswersViewController viewControllers]:发送到实例的无法识别的选择器。
下面是对我的 Storyboard的更全面的概述,这可能有助于理解我哪里出错了:
我很困惑如何解决这个问题,并希望有人能够提供帮助。
谢谢,
缺口
最佳答案
首先,你应该展示导航 Controller ,而不是它的 Root View Controller 。然后当你想用一些数据填充 Root View Controller 时,你需要将它引用为导航 Controller 的 Root View Controller :
UINavigationcontroller *questionnaireNavController = [self.storyboard instantiateViewControllerWithIdentifier:@"QuestionnaireNavigationController"];
[questionnaireNavController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
QuestionnaireViewController *qvc = (QuestionnaireViewController *)[questionnaireNavController topViewController];
[qvc setQuestionsAndAnswers:_questionsAndAnswers];
[self presentViewController:questionnaireNavController animated:NO completion:nil];
其次,在 prepareForSegue:sender: 你根本不需要引用导航 Controller :
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
AnswersViewController *answersVC = segue.destinationViewController;
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
NSArray *answers = [[_questionsAndAnswers objectAtIndex:indexPath.row] objectForKey:@"answers"];
[answersVC setAnswers:answers];
}
关于iOS Storyboard - 导航 Controller 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17932778/