Сбой при доступе к массиву данных для события касания основного графика - PullRequest
1 голос
/ 25 февраля 2012

Я исследовал Интернет и эти форумы.Я изучил пример кода GalleryPlot.И у меня все еще есть проблемы с этим.

Я использую Core Plot для рисования графиков диаграммы рассеяния в своем приложении для iPhone.Графики прекрасно рисуют.Я сделал следующее:

  • добавил возможность касаться точки графика, добавив протоколы CPTScatterPlotDatasource и CPTScatterPlotDelegate в мой класс View Controller.
  • реализовано - (void) scatterPlot:(CPTScatterPlot *) plot plotSymbolWasSelectedAtRecordIndex: (NSUInteger) index {} в моем классе контроллера представления

Операторы NSLog показывают, что метод вызывается и отправляемый индекс является допустимым целым числом.

Если я добавлю какой-либо код, который обращается к NSArray, содержащему данные для графика, приложение аварийно завершает работу с EXC_BAD_ACCESS.Массив данных является переменной-членом контроллера представления, где я реализую метод.

Я попытался перезагрузить данные непосредственно перед тем, как попытаться получить доступ к массиву, но это не помогло.

Вот мой метод делегата:

- (void)scatterPlot:(CPTScatterPlot *)plot plotSymbolWasSelectedAtRecordIndex:(NSUInteger)index {

    NSLog(@"Touched by me: index = %d", index);
    [myGraph reloadDataIfNeeded];

    NSNumber* x = [[dataForOurBabyPlot objectAtIndex:index]valueForKey:@"x"];
}

Сбой происходит в строке "NSNumber * x".

Вот мое объявление класса View Controller:

@interface GraphView : UIViewController <CPTScatterPlotDataSource, 
                                         CPTScatterPlotDelegate> {
IBOutlet CPTGraphHostingView* myHostingView;
    CPTXYGraph* myGraph;

    NSArray* dataForOurBabyPlot;
}
@property (nonatomic, retain) IBOutlet CPTGraphHostingView* myHostingView;

@property (nonatomic, retain) NSArray* dataForOurBabyPlot;

// class methods
@end

Чего мне не хватает?

1 Ответ

1 голос
/ 25 февраля 2012

В вызове -reloadDataIfNeeded нет необходимости - к тому времени, когда вы дойдете до этой точки, Core Plot уже имеет все необходимые данные.

Сбой EXC_BAD_ACCESS вызван dataForOurBabyPlot указанием на неверные данные. Вероятно, он был выпущен, и система использовала эту память для чего-то другого. Проверьте управление памятью и убедитесь, что массив не освобожден, пока вы не покончили с ним.

...