繁体   English   中英

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

[英]How to go back to (currentView-2) UIViewController in Objective-C?

我试图回到以前的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 堆栈,但它只打印当前的一个,比如 。 在层次结构中,我在各种视图中有 UINavigationControllers。

此外,该应用程序因以下错误而崩溃:

* 由于未捕获的异常“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];


    }];
}];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM