如何在初始化后再次 运行 a class

How to run a class again after is has been initialised

我有一个图表,我想用最近的结果加载数据。

Here is a screenshot to show you what it looks like.

我能够正确显示初始数据,但是之后我无法更新视图以显示添加到其中的新数据。

该图是带有自定义 class MacawChartView 的故事板上的视图。

class ViewControllerResultsView: ViewController, GADInterstitialDelegate {

@IBOutlet var chartView: MacawChartView!    

override func viewDidLoad() {
    chartView.frame = CGRect(x: w/2 - (w * 0.95)/2, y: h * 0.57, width: w * 0.95, height: w * 0.45)
    chartView.backgroundColor = UIColor.init(displayP3Red: 253/255, green: 254/255, blue: 149/255, alpha: 1)
    chartView.contentMode = .scaleAspectFit
    MacawChartView.playAnimations()

我尝试了很多不同的方法来 're-run' 图表,因此它使用更新的数据重建但无法通过所需的 'coder aDecoder: NSCoder' 参数。这是 MacawChartView.swift

中的初始化程序
    required init?(coder aDecoder: NSCoder){
    super.init(node: MacawChartView.createChart(), coder: aDecoder)
}

感谢您的帮助。如果需要更多信息等,请告诉我。

该库的文档不是很好,但这是适合您的解决方案。我从 gitHub 上的示例项目开始,但我删除了 init 函数并使数据 var

class CustomMacawView: MacawView {

static var data: [Double] = [101, 142, 66, 178, 92]
static let palette = [0xf08c00, 0xbf1a04, 0xffd505, 0x8fcc16, 0xd1aae3].map { val in Color(val: val)}


public func updateData(newData : [Double])
{
    CustomMacawView.data = newData
    updateDisplay()
}

public func updateDisplay()
{
    let chart = CustomMacawView.createChart()
    self.node = Group(contents: [chart])
}

在我的主视图控制器中,我有一个生成新数据的按钮

@IBAction func cmdUpdateGraph(_ sender: Any) {
    macawView.updateData(newData: [Double.random(in: 1...100),
                                   Double.random(in: 1...100),
                                   Double.random(in: 1...100),
                                   Double.random(in: 1...100),
                                   Double.random(in: 1...100)]) }