代码之家  ›  专栏  ›  技术社区  ›  Pangu

从xcode10.3迁移到xcode11+中断了iOS图表中重写函数的调用?

  •  0
  • Pangu  · 技术社区  · 5 年前

    我正在使用 Charts 我有个问题我不太明白。

    我创建了一个子类 PieChartView 重写函数 calcMinMax 柱状图 在我的自定义类中,允许我在其他地方创建数据的自定义饼图。

    我已更改中的函数 柱状图 internal override func calcMinMax() open override func calcMinMax() ,允许我在自定义类中使用 public override func calcMinMax() :

    open class PieChartView: PieRadarChartViewBase
    {
    ...
        open override func calcMinMax()
        {
            calcAngles()
        }
    }
    
    public class CustomPieChartView: PieChartView
    {
    ....
        public override func calcMinMax()
        {
            calcAngles()
        }
    }
    

    在演示应用程序中,我将图表的类型从 柱状图 CustomPieChartView ,以及在中适当更新类类型 PieChartViewController.xib :

    class PieChartViewController: DemoBaseViewController {
    
        @IBOutlet var chartView: CustomPieChartView!
    
        ...
    }
    

    在Xcode 10.3中,当饼图即将显示时, notifyDataSetChanged 在类内调用 PieRadarCharViewBase calcMinMax公司 ,并因此调用 calcMinMax公司 在我的自定义类中 自定义图表视图 . 这和预期的一样。

    是的一个子类 PieRadarCharViewBase公司 .

    enter image description here

    这个 问题 更新任何代码都会破坏此功能,而不是调用 CustomPieChartView::calcMinMax ,调用父类 PieChartView::calcMinMax ,导致崩溃(与原始版本无关)。

    错误地

    enter image description here

    我附加了包含问题的演示应用程序,以便更好地可视化和复制我的问题。

    drawAngles[j] crash in PieChartRenderer using custom PieChartView in Xcode 11+

    在运行我的演示应用程序之后,有人知道是什么导致了这种情况吗? demo app

    0 回复  |  直到 5 年前
        1
  •  1
  •   AlexSmet    5 年前

    您的问题是,您开始更改iOS图表库中类成员的访问级别,但不够深入。您已更改函数的访问级别 calcMinMax() 在里面 PieChartView 上课地点 internal open . 但您尚未更改中相同函数的访问级别 PieRadarChartViewBase 班级等等。实际上,您必须更改 在整个类层次结构中起作用。