簡體   English   中英

Xamarin.Forms - 頁面因 System.Reflection.TargetInvoicationException 導致應用程序崩潰

[英]Xamarin.Forms - Page crashes app with System.Reflection.TargetInvoicationException

我正在嘗試使用 Microcharts 從某些List<ChartEntry>顯示List<ChartEntry> 我在一個名為DrawSummaryPieChartAsync()的不同類中有一個方法來生成該列表。 當我點擊特定page它會觸發關聯的viewmodel 問題是該方法是一個異步任務,因此需要等待。 這意味着我不能在視圖模型的構造函數中聲明它。 我在這里嘗試了很多解決方法,但我似乎無法弄清楚如何讓它們在我的情況下工作。 所以我繼續在這里遵循這篇文章的精神

可視化數據頁.xaml

<microcharts:ChartView HeightRequest="300" Chart="{Binding ExpenditurePieChart}"/>

VisualDataPage.xaml.cs

    public partial class VisualDataPage : ContentPage
    {
        public VisualDataPage()
        {
            InitializeComponent();
            BindingContext = new VisualDataViewModel();
        }

        protected override void OnAppearing()
        {
            base.OnAppearing();
            (BindingContext as VisualDataViewModel).GetPieChartCommand.Execute(null);
        }
    }

可視化數據視圖模型.cs

    public class VisualDataViewModel : ViewModelBase
    {
        private List<ChartEntry> _chartEntries;
        public static IChartDraw ChartDraw => DependencyService.Get<IChartDraw>();
        public ICommand GetPieChartCommand { get; }

        public VisualDataViewModel()
        {
            _chartEntries = new List<ChartEntry>();
            GetPieChartCommand = new Command(GetPieChart);
        }

        private async void GetPieChart()
        {
            _chartEntries = await ChartDraw.DrawSummaryPieChartAsync();
        }

        public Chart ExpenditurePieChart => new PieChart
        {
            Entries = _chartEntries
        };

    }

它因System.Reflection.TargetInvocationException內部異常而崩潰:

Method not found: void UIKit.UIGestureRecognizer..ctor()

當我設置斷點時,它會在下面的這個塊完成執行后停止

private async void GetPieChart()
{
    _chartEntries = await ChartDraw.DrawSummaryPieChartAsync();
}

關於如何解決這個問題的任何想法?

我找到了答案。 我從這個github上問題的線索在這里 它與編譯到iOS有關。 我簡單地添加了

_ = new Microcharts.Forms.ChartView();

AppDelegate.csFinishedLaunching方法

    [Register("AppDelegate")]
    public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
    {
        public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {
            Xamarin.Forms.Forms.Init();
            LoadApplication(new App());
            _ = new ChartView();

            return base.FinishedLaunching(app, options);
        }
    }

所以雖然我知道這個錯誤與我試圖在構造函數中初始化異步方法無關,但我的方法也是錯誤的。 因此,我還將在下面為可能遇到此問題的任何人提供我為解決該問題所做的工作。 這個SO帖子幫助我解決了這部分

    public class VisualDataViewModel : ViewModelBase
    {
        private List<ChartEntry> _chartEntries;
        public static IChartDraw ChartDraw => DependencyService.Get<IChartDraw>();
        public ICommand GetPieChartCommand { get; }

        public VisualDataViewModel()
        {
            _chartEntries = new List<ChartEntry>();
            InitAsync();
        }

        private async void InitAsync()
        {
            _chartEntries = await ChartDraw.DrawSummaryPieChartAsync();
        }


        public Chart ExpenditurePieChart => new PieChart
        {
            Entries = _chartEntries
        };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM