繁体   English   中英

iOS Storyboard-导航控制器不起作用

[英]iOS Storyboard - Navigation Controller Not Working

我在使用情节提要的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];

问卷视图控制器

当用户点击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]:无法识别的选择器已发送到实例。

以下是我的故事板的更全面概述,这可能有助于您了解我哪里出错了:

故事板

对于如何解决此问题,我感到很困惑,并希望有人能够提供帮助。

谢谢,尼克

首先,您应该提供导航控制器,而不是其根视图控制器。 然后,当您想用一些数据填充根视图控制器时,需要将其引用为导航控制器的根视图控制器:

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中:您根本不需要引用导航控制器:

- (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];
}

您没有正确获取navigationController。 取而代之的segue.destinationViewControlle R,使用self.navigationController

通过调用segue.destinationViewController,您将获得指向要搜索的VC的指针( AnswersViewController ),由于它不是UINavigationController,它不了解消息viewControllers

另外AnswersViewController是objectAtIndex:1我相信,不过请检查一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM