我的应用程序主页面正在检查用户信息。弹出窗口显示,根据某些条件导航到具有网络视图的页面。我使用标准方法导航到它:
await Shell.Current.Navigation.PushAsync(new BindCardPage(user.uid), false);
但当我第一次启动应用程序时,在尝试导航到网页后,NRE被抛出:
System.NullReferenceException: Object reference not set to an instance of an object.
at Xamarin.Forms.ShellSection.OnPushAsync (Xamarin.Forms.Page page, System.Boolean animated) [0x00013] in D:a1sXamarin.Forms.CoreShellShellSection.cs:514
at Xamarin.Forms.ShellSection+NavigationImpl.OnPushAsync (Xamarin.Forms.Page page, System.Boolean animated) [0x00000] in D:a1sXamarin.Forms.CoreShellShellSection.cs:714
at Xamarin.Forms.Internals.NavigationProxy.PushAsync (Xamarin.Forms.Page root, System.Boolean animated) [0x00013] in D:a1sXamarin.Forms.CoreNavigationProxy.cs:117
at Xamarin.Forms.Shell+NavigationImpl.OnPushAsync (Xamarin.Forms.Page page, System.Boolean animated) [0x00000] in D:a1sXamarin.Forms.CoreShellShell.cs:1161
at Xamarin.Forms.Internals.NavigationProxy.PushAsync (Xamarin.Forms.Page root, System.Boolean animated) [0x00013] in D:a1sXamarin.Forms.CoreNavigationProxy.cs:117
但当我再次启动一个应用程序时(条件并没有改变(,同样的弹出窗口会导航到一个没有问题的页面。我尝试添加一个空构造函数并设置一个默认值,但没有帮助。查看断点-我传递的所有数据都不为null,WebView组件也不为null。这是一个wierd错误,我不知道该怎么处理它
我的Xamarin.Forms版本是4.4.0.991537
也发生了类似的崩溃,现在的问题似乎是shell在4.2.xxx及更高版本中将一个空页面推送到NavStack中,这很烦人,但事实就是这样。我通过在Apps shell类的OnBackButtonPressed
中编写以下代码来解决这个问题。
protected override bool OnBackButtonPressed()
{
if (Application.Current.MainPage.GetType() == typeof(AppShell) && Shell.Current.Navigation.NavigationStack.Where(x => x != null).Any())
{
return base.OnBackButtonPressed();
}
else
{
System.Diagnostics.Process.GetCurrentProcess().CloseMainWindow();
return true;
}
}
其中AppShell是我的自定义Shell类。
祝你好运,如果你有任何问题,请随时回复