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 上的空引用异常的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 Xamarin 表单的 Rg 插件弹出窗口

显示弹出窗口的问题

Xamarin效果第三篇之手机底部弹窗

在 iOS 上的 branch.io 上的两个应用程序中支持相同的自定义域

iOS 8、iOS 9、iOS 10 和 iOS 11 上的 UITabBar 的高度是多少?

iOS - iOS 上的以下 LAContext 错误日志是啥意思?