невозможно получить доступ к UIApplication.SharedApplication.KeyWindow во время запуска приложения, поскольку keywindow всегда имеет значение null

Когда мое приложение запускается, я показываю Storyboad с изображением в нем как на заставке. Затем я вызываю LoadApplication (новое приложение ()) из метода FinishedLaunching () в классе AppDelegate. В моем 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();
}

LoadingService ();

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. Есть предложения, что я делаю не так?


person Sai Sunkari    schedule 23.01.2019    source источник


Ответы (1)


Причина:

keyWindow еще не был создан.

Решение:

Вы можете поместить свою show функцию в OnStart.

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

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

    }

См .: жизненный цикл приложения

person Jack Hua    schedule 24.01.2019
comment
Окно UIWindow = новое окно UIWindow (UIScreen.MainScreen.Bounds); UINavigationController navController = новый UINavigationController (); window.RootViewController = navController; window.MakeKeyAndVisible (); Я добавил этот код в методы AppDelegate FinishedLaunching (). Он работает сейчас, но сломает ли это что-нибудь в будущем? @ Джек Хуа - person Sai Sunkari; 24.01.2019
comment
@SaiSunkari В будущем ничего не сломает. Этот метод вызывается, когда приложение загружено и готово к запуску. Вы можете настроить window и RootViewController в этом методе. Если вы не создадите их в этом методе, окно будет создано по умолчанию, и RootViewController будет MainPag в App.cs. - person Jack Hua; 25.01.2019