2016-11-03 3 views
0

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.

Antwort

1

Als ich den View-Controller selbst als Datenquelle mit der exakt gleichen Implementierung der Datenquelle hatte, funktionierte alles wie erwartet.

Dies scheint darauf hinzudeuten, dass die Datenquelleninstanz vorzeitig freigegeben wird.

Das Diagramm enthält nur einen schwachen Verweis auf seine Datenquelle, also muss etwas dafür sorgen, dass es sich nicht bewegt. Könnten Sie überprüfen, ob die Datenquelle für den gesamten Lebenszyklus des Diagramms am Leben erhalten wird, indem Sie sie einer Eigenschaft z.

class ViewController: UIViewController { 
    var dataSource: DayGraphDataSource? 

    override func viewDidLoad() { 
      // chart setup code 
      dataSource = DayGraphDataSource(data: data) 
      chart.datasource = dataSource 
    } 
} 
+0

Das ist das Ticket - danke! –

Verwandte Themen