Core Plot 1.0如何实现reloadData方法?

我昨天问了这个问题,得到了Eric Skroch的大力帮助。 但是,在查看Core Plot网站上的所有文档以及一些示例之后,我仍然有点困惑。 所以我会发布我到目前为止的代码,看看有没有人可以帮助我更多。 Eric可能也会更容易帮忙。 我的问题是,我需要删除一个情节,然后用标签的应用程序中的另一个replace它。 Eric和其他人曾经说过要使用reloadData方法。 但是我没有看到我的代码中可以使用它的位置? 这是我的头文件和实现文件。

#import <UIKit/UIKit.h> #import "CorePlot-CocoaTouch.h" @interface GraphViewController : UIViewController <CPTPlotDataSource> @property (nonatomic, strong) CPTGraphHostingView *hostView; @property (nonatomic, strong) NSMutableArray *myData; @property (nonatomic) float XAXISMIN; @property (nonatomic) float XAXISMAX; @property (nonatomic) float YAXISMIN; @property (nonatomic) float YAXISMAX; @property (strong, nonatomic) IBOutlet UILabel *noGraph; @end 

 #import "GraphViewController.h" #import "MyVariables.h" // a singleton class for my variables @interface GraphViewController () @end @implementation GraphViewController @synthesize hostView = _hostView; @synthesize myData = _myData; @synthesize XAXISMIN; @synthesize XAXISMAX; @synthesize YAXISMAX; @synthesize noGraph; @synthesize YAXISMIN; - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [noGraph setText:@""]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; MyVariables *sharedVariables2 = [MyVariables sharedVariables2]; float a = [sharedVariables2.AA floatValue]; MyVariables *sharedVariables3 = [MyVariables sharedVariables3]; float b = [sharedVariables3.BB floatValue]; MyVariables *sharedVariables4 = [MyVariables sharedVariables4]; float c = [sharedVariables4.CC floatValue]; float d = (4.0f)*a*c; float e = (b*b); float f = (e - d); float g = sqrtf(f); float h = -b; float i = h + g; float ii = h - g; float j = i/(2*a); float k = ii/(2*a); // Define x max and min with answers to quad XAXISMIN = j - (5.0); XAXISMAX = k + (5.0); // Find range for the y axis STILL NEEDS WORK! // maybe if statement for negatives float z = c - ((b*b)/((4.0f)*a)); YAXISMAX = z + 10.0f; YAXISMIN = -z; float inc = (XAXISMAX - XAXISMIN) / 100.0f; float l = XAXISMIN; if ((isnan(g)) || (a == 0)) { [noGraph setText:@"This is not graphable"]; [_hostView setHidden:YES]; } else { NSMutableArray *data = [NSMutableArray array]; for (int i = 0; i < 100; i ++) { float y = (a * (l*l)) + (b * l) + c; NSString *str4 = [NSString stringWithFormat:@"%.3f", l]; NSString *str5 = [NSString stringWithFormat:@"%.3f", y]; NSLog(@"Our X and Y are : %@, %@", str4, str5); [data addObject:[NSValue valueWithCGPoint:CGPointMake(l, y)]]; l = l + inc; } self.myData = data; // put that data array into the array you synthesized [self initPlot]; } } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. } - (void)viewDidUnload { [self setNoGraph:nil]; [super viewDidUnload]; // Release any retained subviews of the main view. } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } - (NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot { return [_myData count]; } - (NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex: (NSUInteger)index { if ([plot.identifier isEqual:@"Your data"]) { NSValue *value = [self.myData objectAtIndex:index]; CGPoint point = [value CGPointValue]; // FieldEnum determines if we return an X or Y value. if (fieldEnum == CPTScatterPlotFieldX) { return [NSNumber numberWithFloat:point.x]; } else // Y-Axis { return [NSNumber numberWithFloat:point.y]; } } return [NSNumber numberWithFloat:0]; } - (void)initPlot { [self configureHost]; [self configureGraph]; [self configurePlots]; [self configureAxes]; } - (void)configureHost { self.hostView = [(CPTGraphHostingView *) [CPTGraphHostingView alloc] initWithFrame:self.view.bounds]; self.hostView.allowPinchScaling = YES; [self.view addSubview:self.hostView]; } - (void)configureGraph { // 1 - Create graph CPTGraph *graph = [[CPTXYGraph alloc] initWithFrame:self.hostView.bounds]; self.hostView.hostedGraph = graph; // 2 - Set graph title NSString *title = @"Your Quadratic"; graph.title = title; // 3 - Create and set text style CPTMutableTextStyle *titleStyle = [CPTMutableTextStyle textStyle]; titleStyle.color = [CPTColor whiteColor]; titleStyle.fontName = @"Helvetica-Bold"; titleStyle.fontSize = 16.0f; graph.titleTextStyle = titleStyle; graph.titlePlotAreaFrameAnchor = CPTRectAnchorTop; graph.titleDisplacement = CGPointMake(0.0f, 10.0f); // 4 - Set padding for plot area [graph.plotAreaFrame setPaddingTop:30.0f]; [graph.plotAreaFrame setPaddingRight:30.0f]; [graph.plotAreaFrame setPaddingLeft:30.0f]; [graph.plotAreaFrame setPaddingBottom:30.0f]; // 5 - Enable use interaction for plot space CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace; plotSpace.allowsUserInteraction = YES; } - (void)configurePlots { // 1 - Get graph and plot spaces and set axis CPTGraph *graph = self.hostView.hostedGraph; CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace; float xAxisMin = XAXISMIN; float xAxisMax = XAXISMAX; float yAxisMin = YAXISMIN; float yAxisMax = YAXISMAX; plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(xAxisMin) length:CPTDecimalFromFloat(xAxisMax - xAxisMin)]; plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(yAxisMin) length:CPTDecimalFromFloat(yAxisMax - yAxisMin)]; // 2 - Create the plot CPTScatterPlot *quadGraph = [[CPTScatterPlot alloc] init]; quadGraph.dataSource = self; quadGraph.identifier = @"Your data"; CPTColor *quadColor = [CPTColor blackColor]; [graph addPlot:quadGraph toPlotSpace:plotSpace]; // 4 - Create styles and symbols CPTMutableLineStyle *quadLineStyle = [quadGraph.dataLineStyle mutableCopy]; quadLineStyle.lineWidth = 2.5; quadLineStyle.lineColor = quadColor; quadGraph.dataLineStyle = quadLineStyle; CPTMutableLineStyle *quadSymbolLineStyle = [CPTMutableLineStyle lineStyle]; quadSymbolLineStyle.lineColor = quadColor; CPTPlotSymbol *quadSymbol = [CPTPlotSymbol ellipsePlotSymbol]; quadSymbol.fill = [CPTFill fillWithColor:quadColor]; quadSymbol.lineStyle = quadSymbolLineStyle; quadSymbol.size = CGSizeMake(6.0f, 6.0f); quadGraph.plotSymbol = quadSymbol; } - (void)configureAxes { // 1 - Create styles CPTMutableTextStyle *axisTitleStyle = [CPTMutableTextStyle textStyle]; axisTitleStyle.color = [CPTColor whiteColor]; axisTitleStyle.fontName = @"Helvetica-Bold"; axisTitleStyle.fontSize = 12.0f; CPTMutableLineStyle *axisLineStyle = [CPTMutableLineStyle lineStyle]; axisLineStyle.lineWidth = 2.0f; axisLineStyle.lineColor = [CPTColor whiteColor]; CPTMutableTextStyle *axisTextStyle = [[CPTMutableTextStyle alloc] init]; axisTextStyle.color = [CPTColor whiteColor]; axisTextStyle.fontName = @"Helvetica-Bold"; axisTextStyle.fontSize = 11.0f; CPTMutableLineStyle *tickLineStyle = [CPTMutableLineStyle lineStyle]; tickLineStyle.lineColor = [CPTColor whiteColor]; tickLineStyle.lineWidth = 2.0f; CPTMutableLineStyle *gridLineStyle = [CPTMutableLineStyle lineStyle]; tickLineStyle.lineColor = [CPTColor blackColor]; tickLineStyle.lineWidth = 1.0f; // 2 - Get axis set CPTXYAxisSet *axisSet = (CPTXYAxisSet *) self.hostView.hostedGraph.axisSet; // 3 - Configure x-axis CPTAxis *x = axisSet.xAxis; x.title = @"X Axis"; x.titleTextStyle = axisTitleStyle; x.titleOffset = 1.0f; x.axisLineStyle = axisLineStyle; x.labelingPolicy = CPTAxisLabelingPolicyEqualDivisions; //CPTAxisLabelingPolicyNone; x.labelTextStyle = axisTextStyle; x.majorTickLineStyle = axisLineStyle; x.majorTickLength = 4.0f; x.tickDirection = CPTSignPositive; //CPTSignNegative; // 4 - Configure y-axis CPTAxis *y = axisSet.yAxis; y.title = @"Y Axis"; y.titleTextStyle = axisTitleStyle; y.titleOffset = -40.0f; y.axisLineStyle = axisLineStyle; y.majorGridLineStyle = gridLineStyle; y.labelingPolicy = CPTAxisLabelingPolicyEqualDivisions; y.labelTextStyle = axisTextStyle; y.labelOffset = 16.0f; y.majorTickLineStyle = axisLineStyle; y.majorTickLength = 4.0f; y.minorTickLength = 2.0f; y.tickDirection = CPTSignNegative; } @end 

所以我希望有人可以让我知道在哪里清除我的数据/情节,所以我一次只能在图表选项卡上有一个图表。 非常感谢!

您应该在-viewDidLoad初始化和configurationgraphics和托pipe视图(即调用-initPlot ),以便只发生一次。 在-viewDidAppear ,执行所需的任何数据处理,为graphics做准备,然后调用-reloadData

那么,对于这个问题的任何人,我find了答案。 在Eric Skroch的大力帮助和指导下,他带领我朝着正确的方向前进。 至less我觉得我做对了! 由于我的图只是用viewDidAppear方法创build的,所以我不得不寻找另一种使用reloadData的方法。 所以我NSLogged了几种方法,看看哪一个被称为视图消失时,我发现viewWillDisappear是其中之一。 所以在这个方法中,我使用了以下;

self.hostView.hostedGraph = nil;

[_myData removeAllObjects];

这清除了graphics,并准备好下一个,并清空我的arrays也准备好了。 我很想听到任何人的评论,他们认为我的解决方法。 我会接受埃里克的回答,因为没有他的帮助,我不会得到这么多。 再次感谢!