UINavigationController:pushViewController 在 iOS 13 中不工作,仍然在同一页面上
UINavigationController: pushViewController not working in iOS 13, remains on same page
我正在从 performSelectorOnMainThread 调用一个方法,该方法调用 pushViewController。但视图未加载并保留在同一页面上。此案例在 iOS 12 中有效,但在 iOS 13 中无效。
- (void)toNextView:{
ImageViewController * vc = ImageViewController.new;
[self performSelectorOnMainThread:@selector(nextScreenWithVC:) withObject:vc waitUntilDone:NO];
}
- (void)nextScreenWithVC:(UIViewController *)vc
{
[self.parent.navigationController pushViewController:vc animated:NO];
}
此函数不加载 ImageViewController。相同的代码适用于 iOS 12.
我通过阅读 iOS 13 发行说明找到了解决方案。为了理解一些变化,我使用了以下 link。
https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle?language=objc
应用程序在调用 pushViewController 之前进入后台状态,并且打开另一个应用程序进行处理。处理完成后,应用程序的回调函数在返回前台后被调用,pushViewController 在 iOS12 中获得正确的 viewContoller。但是由于处理速度和多线程的增加,应用程序的回调函数没有按要求的顺序调用,而是调用了 viewWillEnterForeground(),这必须是默认的正确顺序,并且正在调用 pushViewController,它是 null。因此将一些回调逻辑移动到 viewWillEnterForeground() 函数中,现在它正在为 iOS13 和 iOS12 和波纹管工作。
我正在从 performSelectorOnMainThread 调用一个方法,该方法调用 pushViewController。但视图未加载并保留在同一页面上。此案例在 iOS 12 中有效,但在 iOS 13 中无效。
- (void)toNextView:{
ImageViewController * vc = ImageViewController.new;
[self performSelectorOnMainThread:@selector(nextScreenWithVC:) withObject:vc waitUntilDone:NO];
}
- (void)nextScreenWithVC:(UIViewController *)vc
{
[self.parent.navigationController pushViewController:vc animated:NO];
}
此函数不加载 ImageViewController。相同的代码适用于 iOS 12.
我通过阅读 iOS 13 发行说明找到了解决方案。为了理解一些变化,我使用了以下 link。 https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle?language=objc
应用程序在调用 pushViewController 之前进入后台状态,并且打开另一个应用程序进行处理。处理完成后,应用程序的回调函数在返回前台后被调用,pushViewController 在 iOS12 中获得正确的 viewContoller。但是由于处理速度和多线程的增加,应用程序的回调函数没有按要求的顺序调用,而是调用了 viewWillEnterForeground(),这必须是默认的正确顺序,并且正在调用 pushViewController,它是 null。因此将一些回调逻辑移动到 viewWillEnterForeground() 函数中,现在它正在为 iOS13 和 iOS12 和波纹管工作。