xamarin.ios ios-диаграмма BarChartDataSet

Просто портируйте ios-charts v2.2.3.0 из диспетчера пакетов Xamarin Nuget.

public void BarChart(BarChartModel _barChartModel, BarChartView _barChartView, string _fromView, bool animateChart)
    {
        try {
            barChartModel = _barChartModel;
            barChartView = _barChartView;

            barChartView.SetDrawBarShadowEnabled (false);
            barChartView.SetMaxVisibleValueCount (15);
            barChartView.SetPinchZoomEnabled (true);
            barChartView.SetDrawGridBackgroundEnabled (false);
            barChartView.ScaleYEnabled = false;

            // Chart axis' layout configurations
            ChartXAxis xAxis = barChartView.XAxis;
            xAxis.SetLabelPosition (XAxisLabelPosition.Bottom);
            xAxis.SetDrawGridLinesEnabled (false);
            xAxis.SetLabelTextColor (chartTextColor);
            xAxis.SpaceBetweenLabels = 2;
            xAxis.SetAvoidFirstLastClippingEnabled (true);
            xAxis.SetLabelWidth (30f);

            ChartYAxis leftAxis = barChartView.LeftAxis;
            leftAxis.SetLabelCount (10, false);
            leftAxis.SetLabelPosition (YAxisLabelPosition.OutsideChart);
            leftAxis.SpaceTop = 10f;
            leftAxis.SetLabelTextColor (chartTextColor);
            leftAxis.ValueFormatter = new NSNumberFormatter ();

            ChartYAxis rightAxis = barChartView.RightAxis;
            rightAxis.SetDrawGridLinesEnabled (false);
            rightAxis.SetDrawLabelsEnabled (false);

            ChartLegend legend = barChartView.Legend;
            legend.SetPosition (ChartLegendPosition.BelowChartCenter);
            legend.SetForm (ChartLegendForm.Square);
            legend.FormSize = 9f;
            legend.SetFormToTextSpace (11f);
            legend.XEntrySpace = 15f;
            legend.TextColor = chartTextColor;

            // X Axis
            // -- directly get from dataModel.xAxis;
            NSObject[] truncatedXAxis = new NSObject[barChartModel.xAxis.Count];
            for (int t = 0; t < barChartModel.xAxis.Count; t++) {
                if (barChartModel.xAxis [t].Length > 13)
                    truncatedXAxis [t] = NSObject.FromObject (barChartModel.xAxis [t].Substring (0, 11) + "..");
                else
                    truncatedXAxis [t] = NSObject.FromObject (barChartModel.xAxis [t]);
            }

            // Y Axis
            BarChartDataSet[] yDataSets = new BarChartDataSet[barChartModel.yAxis.Count];

            for (int i = 0; i < barChartModel.yAxis.Count; i++) {
                ChartDataEntry[] barEntry = new ChartDataEntry[barChartModel.yAxis [i].Count];
                //List<ChartDataEntry> dataEntryList = new List<ChartDataEntry>();
                for (int j = 0; j < barChartModel.yAxis [i].Count; j++) {
                    barEntry[j] = new ChartDataEntry((float)barChartModel.yAxis [i] [j], j);
                    //dataEntryList.Add(new ChartDataEntry((float)barChartModel.yAxis [i] [j], j));
                }

                //BarChartDataSet yDataSet = new BarChartDataSet (dataEntryList.ToArray(), barChartModel.dataSetLegend [i].ToString());
                // Crashes HERE V
                BarChartDataSet yDataSet = new BarChartDataSet (barEntry, barChartModel.dataSetLegend [i].ToString());
                yDataSet.SetColor(chartColors [i]);

                yDataSets[i] = yDataSet;
            }

            // Combine xAxis & yAxis
            BarChartData data = new BarChartData (truncatedXAxis, yDataSets);
            data.SetValueTextColor (chartTextColor);
            data.SetHighlightEnabled (false);           // Disable highlight selection

            barChartView.SetData(data);
            barChartView.SetNoDataTextDescription ("");
            barChartView.SetDescriptionText (""); // Disable description - barChartData.SetDescription (String.IsNullOrEmpty (dataModel.name) ? "" : dataModel.name);   
            barChartView.SetNoDataText (""); // Text displayed when no data is given ("You need to provide data for the chart.");
            if (animateChart)
                barChartView.AnimateWithYAxisDuration (800);
        } catch (Exception ex) {
            LogHelper.Debug ("iOSChartHelper", ex.Message, ex);
        }
    }

В строке под этим комментарием // Crashes HERE V происходит сбой с приведенным ниже сообщением об ошибке из среды привязки.

фатальная ошибка: элемент NSArray не соответствует типу элемента Swift Array

Пробовали изменить BarchartDataSet на другую переменную, но безуспешно. У кого-нибудь есть пример кода или решения по этой проблеме?


person Kevin Loke    schedule 25.04.2016    source источник


Ответы (1)


Ваш массив barEntry представляет собой массив ChartDataEntry. Вы должны использовать массив BarChartDataEntry

BarChartDataEntry[] barEntry = new BarChartDataEntry[someIntValue];
person Drunken Daddy    schedule 31.07.2016