Xamarin.Forms.Application.Current.MainPage 为空

Xamarin.Forms.Application.Current.MainPage is null

我有一个不寻常的案例场景,我正在将应用程序从 iOS 迁移到 Forms。

我的设置是 -

  1. iOS 项目加载签名 UIViewController 和处理登录例程。 MainPage 为空。

  2. 登录例程完成后,我将 XF 视图加载为 UIViewController 并将其添加到导航堆栈

var formsController = formsPage.CreateViewController();

CoreApplication.Instance.FormsController = formsController;

var CurrentNavigationController = UIApplication.SharedApplication.KeyWindow.RootViewController;

var viewControllersStack = CurrentNavigationController.ChildViewControllers;

viewControllersStack[viewControllersStack.Length - 1].NavigationController.PushViewController(CoreApplication.Instance.FormsController, true);

这就是当 MainPage 具有作为 Navigation 的值时将其设置为导航页面。

  1. 我转到后台。
protected override void OnSleep()
{
    if (Application.Current.MainPage != null)
    {
        Console.WriteLine("!!!! ---  " + Application.Current.MainPage.GetType().Name);
    }
}

我正在获取 MainPage 的名称 - 因此值不为空。

  1. 我正在回到前台 => OnResume() 发现 MainPage 为空。

但我正在回到我的 XF 视图。 页面之间的导航正常,一切正常。

现在唯一的问题是 MainPage 现在为 null - 某些库如 Rg.Plugins.Popup 无法正常工作,因为它们引用了 MainPage 而我遇到了崩溃。

关于如何保持 MainPage 引用的任何 help/idea?

谢谢!

PS

如果我调用 NavigationService.NavigateAsync(MyPage),我做了一些调查;来自 App.xaml.cs 或者做 => MainPage = new MyPage();然后 MainPage 的实例在所有应用程序生命周期中保持活动状态。

从原始评论中可以看出 post - 问题的解决是在 XF 成为应用程序启动时的第一响应者时移动应用程序逻辑。然后我正常管理导航,并在需要时加载 UIViecontrollers - 让 UIApplication.SharedApplication.KeyWindow 呈现 ViewController.

可以找到有关如何执行此操作的更多详细信息here