核心绘图触摸事件访问数据阵列时崩溃

时间:2012-02-25 00:08:46

标签: objective-c ios core-plot

我已经浏览了互联网和这些论坛。我检查了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 个答案:

答案 0 :(得分:1)

-reloadDataIfNeeded的调用是不必要的 - 当你到达这一点时,Core Plot已经拥有了它所需的所有数据。

EXC_BAD_ACCESS崩溃是由dataForOurBabyPlot指向错误数据引起的。它很可能已经被释放,系统会将内存重用于其他内容。检查内存管理并确保在完成后才释放阵列。