我已经浏览了互联网和这些论坛。我检查了GalleryPlot示例代码。我仍然遇到这个问题。
我正在使用Core Plot在我的iPhone应用程序中绘制散点图。图表画得很漂亮。 我做了以下事情:
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
我错过了什么?
答案 0 :(得分:1)
对-reloadDataIfNeeded
的调用是不必要的 - 当你到达这一点时,Core Plot已经拥有了它所需的所有数据。
EXC_BAD_ACCESS崩溃是由dataForOurBabyPlot
指向错误数据引起的。它很可能已经被释放,系统会将内存重用于其他内容。检查内存管理并确保在完成后才释放阵列。