Rg.Plugins.Popup - iOS 上的空引用异常
Posted
技术标签:
【中文标题】Rg.Plugins.Popup - iOS 上的空引用异常【英文标题】:Rg.Plugins.Popup - null reference exception on iOS 【发布时间】:2020-12-11 06:55:46 【问题描述】:我在我的 Xamarin Forms 应用程序中使用 Rg.Plugins.Popup。这适用于 android,但我在 ios 上遇到问题。 这是我的控件(基于 PopupPage):
<pages:PopupPage
BackgroundColor="White"
x:Class="MyApp.Controls.PopupAlert"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:pages="http://rotorgames.com"
Padding="50,10">
<Frame
BackgroundColor="White"
CornerRadius="25"
HeightRequest="150"
VerticalOptions="Center"
WidthRequest="200">
<StackLayout>
<Label
FontAttributes="Bold"
FontSize="Title"
HorizontalOptions="Center"
HorizontalTextAlignment="Center"
Text="MyApp"
TextColor="Black" />
<Label
x:Name="LblMes"
Margin="0,5"
FontSize="Subtitle"
HorizontalOptions="CenterAndExpand"
TextColor="Black"
HorizontalTextAlignment="Center"
VerticalOptions="CenterAndExpand" />
<BoxView Style="StaticResource Separator" />
<Label
Margin="0,6,0,0"
FontAttributes="Bold"
FontSize="Subtitle"
HorizontalTextAlignment="Center"
HorizontalOptions="Center"
Text="OK"
TextColor="StaticResource PrimaryColor"
VerticalOptions="Center">
<Label.GestureRecognizers>
<TapGestureRecognizer Tapped="OkTapped" />
</Label.GestureRecognizers>
</Label>
</StackLayout>
</Frame>
</pages:PopupPage>
这是代码:
public partial class PopupAlert
public PopupAlert()
InitializeComponent();
public void Init(String message)
LblMes.Text = message;
private async void OkTapped(object sender, EventArgs e)
await PopupNavigation.Instance.PopAsync();
我调用我的弹出窗口并看到它:
private readonly PopupAlert _popAlert = new PopupAlert();
private bool _isShow = false;
public async Task ShowMessage(string message)
//await App.Current.MainPage.DisplayAlert(AppRes.AppTitle, message, "Ok");
try
if (_isShow)
return;
_isShow = true;
_popAlert.Init(message);
await PopupNavigation.Instance.PushAsync(_popAlert);
finally
_isShow = false;
但是我点击“确定”按钮我有异常:
StackTrace " at Rg.Plugins.Popup.IOS.Platform.PopupPlatformRenderer.PrefersStatusBarHidden ()
[0x00000] in
C:\\Users\\mhvdi\\Documents\\OpenSource\\Rg.Plugins.Popup\\Rg.Plugins.Popup\\Platforms\\Ios\\Platform\\PopupPlatformRenderer.cs:61 \n at (wrapper managed-to-native) UIKit.UIA…" string
这是我的 AppDelegate:
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
Rg.Plugins.Popup.Popup.Init();
global::Xamarin.Forms.Forms.Init();
....
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:1.我发现问题只发生在最新版本的Rg.Plugins.Popup 2.0.0.8。
2.使用较早的版本将像2.0.0.7
一样工作。
3.一个issue已经被Github报道了。
4.出栈前检查栈是否为空:
if (Rg.Plugins.Popup.Services.PopupNavigation.Instance.PopupStack.Any())
await PopupNavigation.Instance.PopAsync();
【讨论】:
【参考方案2】:我遇到了同样的问题,通过获取最新版本 2.0.0.9 解决了
【讨论】:
以上是关于Rg.Plugins.Popup - iOS 上的空引用异常的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 上的 branch.io 上的两个应用程序中支持相同的自定义域