在应用启动期间无法访问 UIApplication.SharedApplication.KeyWindow,因为 keywindow 始终为 null

unable to access UIApplication.SharedApplication.KeyWindow during the launch of the app as keywindow is always null

提问人:Sai Sunkari 提问时间:1/24/2019 更新时间:1/24/2019 访问量:2059

问:

当我的应用程序启动时,我向 Storyboad 显示一个图像,就像启动画面一样。 然后我从 AppDelegate 类中的 FinishedLaunching() 方法调用 LoadApplication(new App())。 在我的 App.cs 中,我需要访问 UIApplication.SharedApplication.KeyWindow.RootViewController 以显示进度条。 但是 Keywindow 为 null,因此会崩溃。

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
DependencyService.Register<ILoadingService,LoadingService>();
global::Xamarin.Forms.Forms.Init();
Xamarin.FormsGoogleMaps.Init("AIzaSyCqt-tfGrKhauCgC2Y5UkPreXfMZisPOH8");

LoadApplication(new App());
UIWindow.Appearance.TintColor = new UIColor(red: 0.55f, green: 0.76f, blue: 0.29f, alpha: 1.0f);
return base.FinishedLaunching(app, options);
}

App.cs 文件:

public App(string ticketNumberNotifParam = null, int ticketID = 0)
{
DependencyService.Get<ILoadingService>().Show("Updating user token...");
LoadHomepage();
}

加载服务();

public void Show(string title, string message = "Loading")
{
UIViewController controller = 
UIApplication.SharedApplication.KeyWindow.RootViewController;
        hud = new MTMBProgressHUD(controller.View);
        controller.View.AddSubview(hud);
}

这里 Keywindow 为 null。 有什么建议我做错了什么吗?

Xamarin.Forms Xamarin.iOS UIProperu UIApplication KeyWindow

评论


答:

1赞 nevermore 1/24/2019 #1

原因:

此时尚未实例化。keyWindow

溶液:

您可以将函数放在 下。showOnStart

 protected override void OnStart()
    {
        // Handle when your app starts

        DependencyService.Get<ILoadingService>().Show("Updating user token...");

    }

参考:app-lifecycle

评论

0赞 Sai Sunkari 1/25/2019
UIWindow 窗口 = new UIWindow(UIScreen.MainScreen.Bounds);UINavigationController navController = new UINavigationController();窗。RootViewController = navController;窗。MakeKeyAndVisible();我在 AppDelegate 的 FinishedLaunching() 方法中添加了这段代码。它现在可以工作了,但这将来会破坏任何东西吗?@Jack 华
1赞 nevermore 1/25/2019
@SaiSunkari 将来不会破坏任何东西。当应用程序已加载并准备好运行时,将调用此方法。您可以在此方法中自定义 and。如果不在此方法中实例化它们,则默认情况下窗口将实例化,并且 将是 in .windowRootViewControllerRootViewControllerMainPagApp.cs