[英]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.