在 Xamarin Forms SfListView 中滚动导致 iOS Main 函数中的 NullReferenceException

Scrolling in Xamarin Forms SfListView causes NullReferenceException in iOS Main function

我刚刚在我的应用程序中遇到了一个非常 奇怪的问题。 我正在将 Syncfusion 的 SfListView 添加到我的应用程序中的某些页面,出于某种原因,如果当使用 SfListView 加载的页面时我做的第一件事是滚动 ListView,我会得到一个 NullReferenceException...在 UIApplication.Main( ) 在 iOS 项目的 Main class 中调用的函数。不过,class 并没有什么特别之处。 它变得更好了。如果我先做其他事情,比如拖放 SfListView 中的项目以重新排序,然后 然后 我滚动它,它不会抛出异常。 到底是什么原因造成的?

这是使用 SfListView 的页面之一的 XAML:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:syncfusion="clr-namespace:Syncfusion.ListView.XForms;assembly=Syncfusion.SfListView.XForms"
             mc:Ignorable="d"
             x:Class="Partylist.Views.EventsPage"
             Title="Events"
             BackgroundColor="White">
    <ContentPage.ToolbarItems>
        <ToolbarItem IconImageSource="settings_gear.png"
                     Priority="0"/>
    </ContentPage.ToolbarItems>
    
    <ContentPage.Content>
        <!--Main layout of the page-->
        <StackLayout>
            <!--ListView of the events-->
            <syncfusion:SfListView x:Name="EventsListView"
                                   SelectionMode="Single"
                                   SelectionGesture="Tap"
                                   SelectionChanged="OnItemSelected"
                                   DragStartMode="OnHold">
                <syncfusion:SfListView.DragDropController>
                    <syncfusion:DragDropController UpdateSource="True"/>
                </syncfusion:SfListView.DragDropController>
                <syncfusion:SfListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <SwipeView>
                                <!--Swipe from the right to make some options 
                                appear-->
                                <SwipeView.RightItems>
                                    <SwipeItems>
                                        <SwipeItem Invoked="OnDelete"
                                                   CommandParameter="{Binding .}"
                                                   Text="Delete"
                                                   BackgroundColor="#ff418b"
                                                   IsDestructive="true"/>
                                        <SwipeItem Invoked="OnRename"
                                                   CommandParameter="{Binding .}"
                                                   Text="Rename"
                                                   BackgroundColor="#FF7700"/>
                                    </SwipeItems>
                                </SwipeView.RightItems>
                                <!--This is the content that actually appears-->
                                <StackLayout Padding="20,5">
                                    <Label Text="{Binding EventFolder.Name}"
                                           TextColor="#FF7700"
                                           FontSize="Large"/>
                                </StackLayout>
                            </SwipeView>
                        </ViewCell>
                    </DataTemplate>
                </syncfusion:SfListView.ItemTemplate>
            </syncfusion:SfListView>

            <!--"New Event" button-->
            <Button Text="+ Add New Event"
                    TextColor="#ff418b"
                    FontSize="Large"
                    BackgroundColor="#00ffffff"
                    Clicked="OnNewEventClicked"/>
            
            <!--The banner at the bottom of the screen that gives tips-->
            <Frame BorderColor="#ff418b"
                   Padding="0"
                   HeightRequest="75">
                <FlexLayout Direction="Row"
                            AlignItems="Stretch"
                            JustifyContent="SpaceBetween">
                    <!--The "Tip" icon-->
                    <Image Source="tip_icon.png"
                           Margin="10"
                           FlexLayout.Basis="50"/>
                    <!--The short version of the tip-->
                    <Label x:Name="tipLabel"
                           VerticalTextAlignment="Center"
                           TextColor="#bb0099"
                           FontSize="Medium"
                           FontAttributes="Bold"
                           FlexLayout.Basis="240"/>
                    <!--The button that opens up a screen 
                    with the rest of the tip-->
                    <Button Clicked="OnMoreClicked"
                            Text="More"
                            TextColor="White"
                            FontAttributes="Bold"
                            FontSize="Medium"
                            BackgroundColor="#ff418b"
                            FlexLayout.Basis="100"/>
                </FlexLayout>
            </Frame>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

这是 iOS 项目的 Main class:

using System;
using System.Collections.Generic;
using System.Linq;

using Foundation;
using UIKit;

namespace Partylist.iOS
{
    public class Application
    {
        // This is the main entry point of the application.
        static void Main(string[] args)
        {
            // if you want to use a different Application Delegate class from "AppDelegate"
            // you can specify it here.
            UIApplication.Main(args, null, "AppDelegate"); // This is the line that throws the exception.
        }
    }
}

更新:我刚刚将 SfListView 应用到项目中的另外几个页面,但我无法在这些页面列表的项目中输入条目或使用它们的 SwipeView(Xamarin 中的实验性视图,而不是来自 SfListView 的那些)而不会以与上述相同的方式使应用程序崩溃。

我刚刚摆脱了 Synfcusion ListView 并切换回 Xamarin 附带的那个。 @BenReierson 说这是 Xamarin 的问题,所以也许我会考虑在该错误得到修复后切换回去。

很高兴地通知,报告的问题“使用 DragDropController 滚动 SfListView 时抛出 NullReferenceException”已包含在 Syncfusion 的最新每周 NuGet 发布更新版本 18.2.0.46 中,可用于下载 (https://www.nuget.org/).