iOS Storyboard - 导航 Controller 不工作

标签 ios uiviewcontroller uinavigationcontroller storyboard uitableview

我在使用 Storyboard 的 iOS 项目中遇到导航 Controller 问题。

该项目的主要部分是一个UITabBar。当应用程序第一次加载屏幕 RegisterViewController 时:

Register View Controller

当用户点击“注册”按钮时,会发出 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];

Questionnaire View Controller

当用户点击 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的更全面的概述,这可能有助于理解我哪里出错了:

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/

相关文章:

ios - 当 UITableViewController 嵌入到 UIViewController 中的容器中时,额外的表格单元格

ios - 导航栏phonegap插件

iOS : wrong Czech country code

ios - UIPageViewController 更改时更改 UINavigationController 的标题

objective-c - 关闭模态转场

UINavigationController 的 setViewControllers 在 IOS10 中添加后退按钮

iphone - 设置导航栏标题字体的下一个 View ?帮助“setTitle View”到某些标签?

ios - Firebase 远程配置错误 8003,Unity,iOS

ios - 今日小部件扩展高度 - iOS10

ios - 在 iOS 中获取 YouTube channel 内容