swift - 从 Xcode 10.3 迁移到 Xcode 11+ 会中断 iOS 图表中覆盖函数的调用?
问题描述
我目前正在使用图表与 CocoaPods 一起使用,但我有一个不太明白的问题。
我创建了一个子类PieChartView
并覆盖了calcMinMax
函数PieChartView
,允许我在其他地方创建我的数据的自定义饼图。
我已将函数PieChartView
从更改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()
}
}
在演示应用程序中,我将 chartView 的类型从 更改PieChartView
为CustomPieChartView
,并在以下位置适当地更新了类类型PieChartViewController.xib
:
class PieChartViewController: DemoBaseViewController {
@IBOutlet var chartView: CustomPieChartView!
...
}
在 Xcode 10.3 中,当饼图即将显示时,notifyDataSetChanged
在调用 的类PieRadarCharViewBase
中调用calcMinMax
,结果调用calcMinMax
我的自定义类中的覆盖CustomPieChartView
。这按预期工作。
仅供参考:PieChartView
是PieRadarCharViewBase
.
堆栈显示在 Xcode 10.3 中正常工作:
问题是,迁移到 Xcode 11,而不更新任何代码会破坏此功能,而不是调用CustomPieChartView::calcMinMax
,而是调用父类PieChartView::calcMinMax
,导致崩溃(与原始问题无关)。
堆栈显示在 Xcode 11 中工作不正确:
我附上了包含问题的演示应用程序,以更好地可视化和复制我的问题。
我根本无法弄清楚是什么导致了这个问题。我试图在库的 repo 中提出一个问题,但没有收到任何回复:drawAngles[j] crash in PieChartRenderer using custom PieChartView in Xcode 11+
运行我的演示应用程序后,有谁知道是什么原因造成的?演示应用
最好使用 Xcode 10.3 和 Xcode 11 运行演示以查看差异。
解决方案
您的问题是您开始更改 iOS-Chart 库中类成员的访问级别,但不够深入。您已将类中函数calcMinMax()
的访问级别PieChartView
从更改internal
为open
。但是您没有更改类中相同功能的访问级别PieRadarChartViewBase
等等。calcMinMax()
实际上,您必须在整个类层次结构中更改函数的访问级别。
推荐阅读
- node.js - Flow 不考虑 flow-typed 的已安装定义
- firebase - 在 Futurebuilder 中使用 CachedNetworkImage 在图像被缓存后仍然显示进度指示器
- django-rest-framework - 使用 Github 操作的自动 Django API 测试失败
- logging - AWS greengrass-cli 日志获取日志目录与日志文件
- mysql - 在 mysql 中展开包含 json 字符串列表的列
- python - 在我的 Windows 10 上安装 PostgreSQL 13 时出现问题,在运行 pgAdmin4 时会出现致命错误:“无法联系 pgAdmin 4 服务器:”
- node.js - 找不到 Partials .hbs 中的文件
- html - CSS flexbox 给出意外的输出
- java - Java中的D-Bus信号OnBatteryChanged处理程序未接收到信号
- python - 如何循环遍历以整数作为列名的数据框的列