Ich experimentiere gerade mit ShinobiCharts und habe ein neues Projekt erstellt, um dies zu tun.Benutzerdefiniertes Datenquellenobjekt wird nicht korrekt erstellt
Ich habe ein Objekt mit einem benutzerdefinierten initialiser, die an eine Datenquelle Protokoll entspricht:
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])
}
}
I dann eine Instanz dieses Objekts als Datenquelle eines Diagramms zuzuordnen:
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
Dies führt jedoch dazu, dass die App abstürzt und beschwert sich -[<classname> numberOfSeriesInSChart:]: unrecognized selector sent to instance
, wobei <classname>
scheinbar jeder Klassenname sein könnte. Ich habe es unter anderem als __NSCFNumber
und NSISRestrictedToZeroMarkerVariable
gesehen - es scheint sich bei Neuinstallationen der App zu ändern.
Wenn ich jedoch einen Haltepunkt in der Zeile setze, die die Datenquelle im Diagramm tatsächlich als dieses benutzerdefinierte Objekt einstellt und die erstellte Instanz druckt, führe die Ausführung fort, läuft die App absolut gut.
Wenn ich den View-Controller selbst als Datenquelle mit der exakt gleichen Datenquellenimplementierung hatte, funktionierte alles wie erwartet.
Das ist das Ticket - danke! –