私は現在ShinobiChartsを実験しており、これを行うための新しいプロジェクトを作成しました。
データソースプロトコルに準拠するカスタムイニシャライザーを持つオブジェクトがあります。
import ShinobiCharts
import UIKit
class GraphDataSource: NSObject, SChartDatasource {
let data: [Double]
/* Initialisation Methods */
init(data: [Double]) {
self.data = data
}
/* SChartDatasource Methods */
func numberOfSeries(in chart: ShinobiChart) -> Int {
return 1
}
func sChart(_ chart: ShinobiChart, seriesAt index: Int) -> SChartSeries {
return SChartColumnSeries()
}
func sChart(_ chart: ShinobiChart, numberOfDataPointsForSeriesAt seriesIndex: Int) -> Int {
return data.count
}
func sChart(_ chart: ShinobiChart, dataPointAt dataIndex: Int, forSeriesAt seriesIndex: Int) -> SChartData {
return dataPoint(forDataIndex: dataIndex)
}
func dataPoint(forDataIndex dataIndex: Int) -> SChartData {
return SChartDataPoint(xValue: dataIndex, yValue: data[dataIndex])
}
}
次に、このオブジェクトのインスタンスをグラフのデータソースとして割り当てます。
let data: [Double] = [0, 0, 0, 0, 0, 0, 10, 10, 30, 50, 100, 100, 80, 40, 30, 50, 40, 70, 20, 10, 10, 10, 0, 0]
...
let dataSource = DayGraphDataSource(data: data)
chart.datasource = dataSource
しかし、これはという不満を、クラッシュにアプリを起こす-[<classname> numberOfSeriesInSChart:]: unrecognized selector sent to instance
ところ、<classname>
一見任意のクラス名である可能性があります。私はそれを見てきました__NSCFNumber
し、NSISRestrictedToZeroMarkerVariable
他の人の間で-アプリの新規インストールに変更するようです。
ただし、チャート上のデータソースを実際にこのカスタムオブジェクトに設定する行にブレークポイントを設定し、作成したインスタンスを出力してから実行を続行すると、アプリは完全に正常に実行されます。
ビューコントローラ自体をデータソースとして使用し、まったく同じデータソース実装を使用した場合、すべてが期待どおりに機能しました。
ビューコントローラ自体をデータソースとして使用し、まったく同じデータソース実装を使用した場合、すべてが期待どおりに機能しました。
これは、データソースインスタンスの割り当てが早期に解除されていることを示しているようです。
グラフはそのデータソースへの弱い参照しか保持していないため、何かがそれを確実に回避する必要があります。データソースをプロパティに割り当てることで、チャートのライフサイクル全体にわたってデータソースが存続していることを確認できますか?
class ViewController: UIViewController {
var dataSource: DayGraphDataSource?
override func viewDidLoad() {
// chart setup code
dataSource = DayGraphDataSource(data: data)
chart.datasource = dataSource
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加