ํ์ฅ ํ๋ก๊ทธ๋จ์ด ์์ต๋๋ค
```
๋ง๋ ์ฐจํธ ๋ณด๊ธฐ {
private class BarChartFormatter: NSObject,IAxisValueFormatter {
var values : [String]
required init (values : [String]) {
self.values = values
super.init()
}
func stringForValue(_ value: Double, axis: AxisBase?) -> String {
return values[Int(value)]
}
}
func setChartValues (xAxisValues : [String] , values : [Double],label : String) {
var barChartDataEntries = [BarChartDataEntry]()
for i in 0..<values.count {
let dataEntry = BarChartDataEntry(x: Double(i), y: values[i])
barChartDataEntries.append(dataEntry)
}
let chartDataSet = BarChartDataSet(values: barChartDataEntries, label: label)
chartDataSet.colors = ChartColorTemplates.colorful()
let chartData = BarChartData(dataSet: chartDataSet)
let formatter = BarChartFormatter(values: xAxisValues)
let xAxis = XAxis()
xAxis.valueFormatter = formatter
self.xAxis.valueFormatter = xAxis.valueFormatter
self.xAxis.labelPosition = .bottom
self.data = chartData
// self.data?.notifyDataChanged()
// self.notifyDataSetChanged()
self.animate(xAxisDuration: 2.0, yAxisDuration: 2.0, easingOption: .easeInBack) // Cause crash
}
}
```
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์์ ์ฑ์ด ์ถฉ๋ํฉ๋๋ค.
for j in 0 ..< Int(ceil(Double(dataSet.entryCount) * animator.phaseX)) // Crash here
{
guard let e = dataSet.entryForIndex(j) as? BarChartDataEntry else { continue }
์น๋ช ์ ์ธ ์ค๋ฅ : upperBound <lowerBound๋ก ๋ฒ์๋ฅผ ํ์ฑ ํ ์ ์์ต๋๋ค.
(lldb) po dataSet.entryCount
12
(lldb) po animator.phaseX
-0.085005447941268492
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ญ์์ค
๋๋ ๋น์ ์ ํ๋ก์ ํธ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ํฐ ๊ธฐ๋ฅ์ด์์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์๊ฐ์ด ๋๋ฌ๋ค
๋ผ ์๋ฃจ์
DispatchQueue.main.async(execute: {() -> Void in
self.animate(xAxisDuration: 2.0, yAxisDuration: 2.0, easingOption: .easeInBack)
})
๋๋ ๊ทธ๋ ๊ฒ ์๊ฐํด,
for j in 0 ..< Int(ceil(Double(dataSet.entryCount) * animator.phaseX))
์ํด ๋ฐ๊ฟ๋๋ค
for j in stride(from: 0, to: Int(ceil(Double(dataSet.entryCount) * animator.phaseX)), by: 1)
@PrashantKT ๊ฐ์ ๋ฌธ์ ๊ฐ ์๊ณ @txoan ์ด ๊ฒ์ํ ์ค๋ํซ์ด ์๋ํ๊ณ ์์ง๋ง ์๋ฃจ์ ์ด ์๋ก์ด ๋ฒ๊ทธ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ @jjatie @liuxuan30