当我调用方法dismissView时,我收到此错误。这是方法存根:
-(IBAction)dismissView
{
RootViewController *rootController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
[self.navigationController popToViewController:rootController animated:YES];
}
这应该有效,我已经检查过,rootController被初始化并分配。有什么想法吗?
答案 0 :(得分:26)
我最近遇到了这个问题并用这样的东西解决了......
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
答案 1 :(得分:12)
我使用pushViewController
而不是popToViewController
答案 2 :(得分:11)
-popToViewController
用于在堆栈中弹出视图控制器,直到已存在的控制器。你的UINavigationController
有一堆ViewControllers(存储在viewControllers
属性中),当你popToViewController
时,你想要传递该数组中的一个元素作为第一个参数
在这种情况下,您最有可能要做的是使用-popViewControllerAnimated:
,它会从堆栈中移除顶部ViewController
答案 3 :(得分:4)
你正在那里分配RootViewController。它在导航控制器的堆栈中不存在,因此无论您弹出多远,都无法触及它。
答案 4 :(得分:4)
如果您使用的是Storyboads,请使用此segue:
#import "PopToControllerSegue.h"
@implementation PopToControllerSegue
- (void) perform
{
UIViewController *sourceViewController = (UIViewController *)self.sourceViewController;
UIViewController *destinationViewController = (UIViewController *)self.destinationViewController;
for (UIViewController* controller in sourceViewController.navigationController.viewControllers) {
if ([controller isKindOfClass:destinationViewController.class]) {
[sourceViewController.navigationController popToViewController:controller animated:YES];
return;
}
}
NSLog(@"PopToControllerSegue has failed!");
}
@end
答案 5 :(得分:1)
UINavigationController
有一堆ViewControllers
,存储在viewControllers(NSArray)属性中。枚举到所需的ViewController
并弹出到ViewController
。
以下代码应解决问题。
-(IBAction)dismissView
{
NSArray *array = self.navigationController.viewControllers;
for (id controller in array) {
if ([controller isKindOfClass:[RootViewController class]]) {
[self.navigationController popToViewController:controller animated:YES];
}
}
}
答案 6 :(得分:1)
快捷键4
对于仍在寻找不涉及 UINavigationController 堆栈索引的更好解决方案的人,使用更大的导航堆栈会遇到更多问题-这是解决此问题的最简单方法:
if let destinationViewController = navigationController?.viewControllers
.filter(
{$0.classForCoder == DestinationViewController.self})
.first {
navigationController?.popToViewController(destinationViewController, animated: true)
}
答案 7 :(得分:0)
使用Push Segues时,您可以使用此方法轻松返回根目录:
[self.navigationController popToRootViewControllerAnimated:YES];
使用模态分段时(由于问题中的忽略一词并作为一般参考),您可以使用此方法dismiss
视图控制器:
[self dismissViewControllerAnimated:YES completion:nil];
答案 8 :(得分:0)
尝试这一行解决方案。
快速4 +:
self.navigationController?.popToViewController ((self.navigationController?.viewControllers[1]) as! Your_ViewController, animated: true)
Objective-C:
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
答案 9 :(得分:0)
在我的情况下,问题是我在根ViewController中,这仅适用于堆叠在其上的VC。 要弹出RootViewController,请使用
navigationController?.popToRootViewController(animated: true)
答案 10 :(得分:0)
const request = require("request");
const fs = require("fs");
const url = "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e1/FullMoon2010.jpg/1024px-FullMoon2010.jpg";
const fileStream = fs.createWriteStream("request-test.jpg");
const req = request(url);
req.on("response", response => {
response.pipe(fileStream);
});