我试图回到上一个UIViewContoller
。
我这样做的方法是使用这段代码
.h
@property(nonatomic, copy) NSArray *viewControllers;
.m
[Event saveInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) {
self.viewControllers = self.navigationController.viewControllers;
NSLog(@"Viewcontroller stack : %@", self.viewControllers);
[self.navigationController pushViewController:[self.viewControllers objectAtIndex:self.viewControllers.count-2] animated:YES];
}];
}];
self.viewControllers
我存储了UIViewController堆栈,但它只打印当前的堆栈,比如说。在层次结构中,我在各种视图中都有UINavigationController。
此外,应用程序崩溃并出现此错误:
*由于未捕获的异常"NSRangeException"而终止应用程序,原因:"*-[__NSSingleObjectArrayI objectAtIndex:]:索引超出边界18446744073709551615 [0 .. 0]">
编辑:
我试过这个:
MyEventsViewController *tomyevents = [[MyEventsViewController alloc] initWithNibName:@"MyEventsViewController" bundle:nil];
[self.navigationController popToViewController:tomyevents animated:YES];
我收到以下错误:
由于未捕获的异常"NSInternalInconsistencyException"而终止应用程序,原因:"试图弹出到不存在的视图控制器。
编辑2:
我正在使用模态续集
截图
将手伸入导航控制器的堆栈并尝试将视图控制器从 stac 的中间推到顶部是非常错误的,并且会导致坏事发生。
将导航控制器堆栈视为一堆板。您可以将新的视图控制器推到堆栈的顶部,或者从堆栈中弹出任何数字以从下方显示一个,但您不能将视图控制器从堆栈中间取出并将其放在顶部。这将导致堆栈倒塌并破裂。
若要弹出到特定的视图控制器,请使用popToViewController(_:animated:)
向该方法传递指向当前堆栈中要位于堆栈顶部的视图控制器的指针。导航控制器将根据需要从其顶部弹出任意数量的视图控制器,使其成为新的顶部视图控制器。
编辑:
如果您知道要弹出到 n-2 视图控制器,您的代码可能如下所示:
[Event saveInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) {
NSArray *navStack = self.navigationController.viewControllers;
//Fetch the count-2 view controller from the stack
if (navStack.count <3) {
return;
}
UIViewController *nMinusTwo = [navStack objectAtIndex: navStack.count-2];
[self.navigationController popToViewController: nMinusTwo, animated: YES];
}];
}];