Nic*_*ick 1 storyboard uitableview uiviewcontroller uinavigationcontroller ios
我在使用Storyboard的iOS项目中遇到导航控制器问题.
该项目的主要部分是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];
Run Code Online (Sandbox Code Playgroud)

当用户点击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];
}
Run Code Online (Sandbox Code Playgroud)
此时应用程序崩溃时出现以下错误: - [AnswersViewController viewControllers]:发送到实例的无法识别的选择器.
以下是我的故事板的更全面的概述,这可能有助于理解我出错的地方:

我很难过如何解决这个问题,我希望那里有人能够提供帮助.
谢谢,尼克
首先,您应该呈现导航控制器,而不是其根视图控制器.然后,当您想要使用某些数据填充根视图控制器时,需要将其作为导航控制器的根视图控制器引用:
UINavigationcontroller *questionnaireNavController = [self.storyboard instantiateViewControllerWithIdentifier:@"QuestionnaireNavigationController"];
[questionnaireNavController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
QuestionnaireViewController *qvc = (QuestionnaireViewController *)[questionnaireNavController topViewController];
[qvc setQuestionsAndAnswers:_questionsAndAnswers];
[self presentViewController:questionnaireNavController animated:NO completion:nil];
Run Code Online (Sandbox Code Playgroud)
第二,在prepareForSegue:sender:你根本不需要引用导航控制器:
- (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];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9808 次 |
| 最近记录: |