从 Xcode 10.3 迁移到 Xcode 11+ 会中断 iOS 图表中覆盖函数的调用?

Migration from Xcode 10.3 to Xcode 11+ breaks call from overridden function in iOS Charts?

我目前正在将 Charts 与 CocoaPods 一起使用,但我遇到了一个不太明白的问题。

我创建了 PieChartView 的子 class 并在我的自定义 class 中覆盖了 PieChartView 中的函数 calcMinMax,允许我在别处创建一个我的数据的自定义饼图。

我已将 PieChartView 中的函数从 internal override func calcMinMax() 更改为 open override func calcMinMax(),允许我在自定义 class 中使用 public override func calcMinMax() 覆盖它:

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

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

在演示应用程序中,我将 chartView 的类型从 PieChartView 更改为 CustomPieChartView,并在 PieChartViewController.xib 中适当更新了 class 类型:

class PieChartViewController: DemoBaseViewController {

    @IBOutlet var chartView: CustomPieChartView!

    ...
}

在Xcode10.3中,即将显示饼图时,notifyDataSetChanged在class内部调用PieRadarCharViewBasecalcMinMax ,结果在我的自定义 class CustomPieChartView 中调用了被覆盖的 calcMinMax这按预期工作。

仅供参考:PieChartViewPieRadarCharViewBase 的子 class。

堆栈显示在 Xcode 10.3 中正常工作:

问题是,迁移到Xcode 11,没有更新任何代码会破坏此功能,而不是调用CustomPieChartView::calcMinMax,调用父 class PieChartView::calcMinMax,导致崩溃(与原始问题无关)。

堆栈显示在 Xcode 11 工作 不正确:

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

我根本无法弄清楚是什么导致了这个问题。我试图在图书馆的回购中提出问题,但没有收到任何回复:drawAngles[j] crash in PieChartRenderer using custom PieChartView in Xcode 11+

在 运行我的演示应用程序之后,有人知道是什么原因造成的吗? demo app

最好使用 Xcode 10.3 和 Xcode 11 运行 演示以查看差异。

您的问题是您开始更改 iOS-Chart 库中 classes 成员的访问级别,但不够深入。您已将 PieChartView class 中函数 calcMinMax() 的访问级别从 internal 更改为 open。但是您没有更改 PieRadarChartViewBase class 等中相同功能的访问级别。实际上,您必须在整个 class 层次结构中更改 calcMinMax() 函数的访问级别。