navigationController popToRootViewControllerAnimated:YES 不调用 viewWillAppear

Posted

技术标签:

【中文标题】navigationController popToRootViewControllerAnimated:YES 不调用 viewWillAppear【英文标题】:navigationController popToRootViewControllerAnimated:YES does not call viewWillAppear 【发布时间】:2020-03-19 20:24:08 【问题描述】:

如果我在 ios 内运行,不 swift,

[[navigationController popViewControllerAnimated:YES] viewWillAppear:YES] 

它在前一个 VC 上调用 viewWillAppear。

我需要跳回根 VC 并调用 ViewWillAppear;然而,

[[navigationController popToRootViewControllerAnimated:YES] viewWillAppear:YES] 给我一个编码错误。

有没有办法在我的 appDelegate 中没有 applicationWillEnterForeground: 和 applicationDidBecomeActive: 方法来做到这一点

我已经在 init 中尝试过

 [[NSNotificationCenter defaultCenter] addObserver:self 
                                   selector:@selector(willEnterForeground:)
                                       name: UIApplicationWillEnterForegroundNotification
                                     object:nil];

在正文中

-(void) willEnterForeground:(Notification*)NotificationCenter

(self viewWillAppear:YES);

这似乎也不叫 viewWillAppear。

【问题讨论】:

“给我一个编码错误” -- 你遇到了什么错误? 【参考方案1】:

您的代码似乎很不正确...

首先,您永远不应该调用viewWillAppear - 系统会通知您的控制器该视图将出现。

其次,只是调用:

[self.navigationController popViewControllerAnimated:YES];

将导航到堆栈中的上一个视图控制器,或者:

[self.navigationController popToRootViewControllerAnimated:YES];

将导航到根视图控制器。

在这两种情况下,viewWillAppear在视图出现时由系统调用。

【讨论】:

在以前的操作系统下是这样(以及我之前的代码是如何读取的),但不是最新的。你运行的是什么版本? 在各种设备/模拟器上进行了快速测试... iOS 12.x 到 13.3 ... viewWillAppear 在“导航至”视图控制器中被调用。这是 GitHub 上示例项目的链接 - 每次导航到 VC 时,它都会记录 viewWillAppear 调用。 github.com/DonMag/WillAppearTest 你运行的是什么版本的 Xcode?正如我之前所说,我的代码过去只是导航回上一个或根 VC,并且调用了 viewWillAppear,但自从我更新到 Catalina 和最新的 Xcode 后就没有了。如果我连接运行 iOS 10 或 13 的实际设备,它会像以前一样正常运行,但如果我使用最新的模拟器运行应用程序,它不会调用 viewWillAppear 或 viewDidAppear。现在有关于这个问题的其他线程。 我在 Catalina 上运行 Xcode 11.3 和 iPhone 8 模拟器 13.3 创建了那个 GitHub 项目。当您运行我的示例应用程序时,您是否在调试控制台中看不到 viewWillAppear 打印语句? 嗨,DonMag。在家工作,所以我目前无法使用我的开发计算机。您的示例代码是否包含推送视图和弹出视图以显示先前或根视图控制器?那是无法调用 viewWillAppear 的时候。当原始 VC 出现时,该方法被调用,但是当我弹回根目录或以前的 VC 时,它没有。这就是我开始将 viewWillAppear:boolean 添加到弹出视图命令的原因。这确实适用于新模拟器,但没有 viewWillAppear:boolean 它适用于运行 13.3 的实际设备,但不适用于模拟器。

以上是关于navigationController popToRootViewControllerAnimated:YES 不调用 viewWillAppear的主要内容,如果未能解决你的问题,请参考以下文章

lvs+keepalived

LVS+keepalived 实战

Windows DOS命令 bat批处理脚本交互操作

Windows DOS命令 bat批处理脚本交互操作

通过 NavigationController-TabBarController-NavigationController 以编程方式导航

采用intel编译器并行编译执行杂化函数计算CP2K