viewWillAppear 不调用 IOS 13 objective C

viewWillAppear does not call in IOS 13 objective C

我有一个大型应用程序是在 Xcode 8 下创建的(所以它很老派)。我没有使用 swift 或故事板,所有控件都是在代码中创建的。

自从移动到 IOS 13 / Xcode 11.3 后,当 VC 委托被推送到导航控制器,然后调用 popToRootViewController 时,不会调用 rootViewController viewWillAppear .

我试过用

VC.modalPresentationStyle=UIModalPresentationFullScreen,行为没有任何变化。

我有一个包含 window 的 MainWindow.xib 并且 navController 被设置为子视图

在 AppDelegate.m 中:

mainVC = [[MainViewController alloc] init];
selectSomethingVC=[[SelectSomethingViewController] init];

navigationController = [[UINavigationController alloc] initWithRootViewController:mainVC];
[window addSubview:navigationController.view];
[window setRootViewController:navigationController];        
[window makeKeyAndVisible];

在MainViewController中

- (IBAction) selectSomethingButtonPressed:(id)sender
{
AppDelegate *del = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[self.navigationController pushViewController:[del selectSomethingVC] animated:YES];
}

在 SelectSomethingViewController

- (IBAction) cancelButtonPressed:(id)sender
{
[self.navigationController popToRootViewControllerAnimated:true];
}

此代码在之前的 Xcode 版本和 IOS 10 上运行良好,viewWillAppear 中的代码是 运行,这对应用程序的运行至关重要。在较早的 IOS 和 Xcode 上,在模拟器和实际设备上。

使用 IOS 13 和 Xcode 11.3,模拟器不会调用 viewWillAppear,但奇怪的是,在实际设备上可以正常工作 运行ning IOS 13 并启动在 Xcode 内作为测试设备。我愿意接受解决方法或建议。

如果您不手动添加子控制器,则手动添加控制器的视图没有意义。

应删除以下行:

[window addSubview:navigationController.view];

viewWillAppear 与向层次结构添加视图有关。当您使用 setRootViewController: 显示控制器时,视图已经是层次结构的一部分,这可能会破坏事件机制。