2016-11-03 2 views
0

Я сейчас экспериментирую с 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 среди других - кажется, что он изменился при свежих установках приложения.

Однако, если я поставил точку останова на строке, которая фактически устанавливает источник данных на диаграмме, чтобы этот пользовательский объект и распечатать экземпляр, который я создал, а затем продолжить выполнение, приложение работает абсолютно нормально.

Когда у меня был сам контроллер представления как источник данных, с той же реализацией источника данных, все работало, как ожидалось.

ответ

1

Когда у меня был сам контроллер представления как источник данных, с той же реализацией источника данных, все работало, как ожидалось.

Это похоже на то, что экземпляр источника данных освобождается раньше.

В диаграмме содержится только слабая ссылка на источник данных, поэтому что-то необходимо для обеспечения ее зависания. Не могли бы вы проверить, что источник данных поддерживается в течение всего жизненного цикла диаграммы, присваивая его свойству, например.

class ViewController: UIViewController { 
    var dataSource: DayGraphDataSource? 

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

Это билет - спасибо! –

Смежные вопросы