如何在 Objective-C 中返回 (currentView-2) UIViewController?



我试图回到上一个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];

}];
}];

相关内容

  • 没有找到相关文章

最新更新