当我的用户点击一个按钮时,我想返回到我的推栈中的第一个视图控制器。我已经记录了堆栈,并返回以下内容:
[4352:924095] HERE IT IS (
"<MapViewController: 0x10c014800>",
"<MUAQuestionViewController: 0x10674b4f0>",
"<MUAQuestionViewController: 0x10953e730>",
"<MUAQuestionViewController: 0x10674e4b0>",
"<MUAQuestionViewController: 0x1067502f0>",
"<MUAQuestionViewController: 0x10949e5e0>",
"<MUAQuestionViewController: 0x109549b90>"
)
当我的用户点击我的“关闭”按钮时,我只是希望将它们返回给MapViewController。就是说,当我的用户点击“关闭”时,会发生以下崩溃:
*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* -[NSDictionary initWithObjects:forKeys:]:对象数(0)与对象数不同 键(1)'
这是我的代码:
- (IBAction)closeFinal:(id)sender {
NSArray *array = [self.navigationController viewControllers];
NSLog(@"HERE IT IS %@", array);
[self.navigationController popToViewController:[array objectAtIndex:1] animated:YES];
}
为什么会这样?
答案 0 :(得分:0)
您应该使用popToRootViewControllerAnimated:方法关闭所有推送的视图控制器
弹出除根视图以外的所有视图控制器 控制器并更新显示。
[self.navigationController popToRootViewControllerAnimated:YES];
答案 1 :(得分:0)
不要保留导航控制器的viewControllers
;它是易变的(即,它将在您的背后突变)。只需获取所需的视图控制器即可。这是一个安全的版本:
UINavigationController* nav = self.navigationController;
if (nil != nav && nav.viewControllers.count > 0) {
UIViewController* vc = [nav.viewControllers objectAtIndex:0];
[nav popToViewController:vc animated:YES];
}