2012-09-08 5 views
9

Sto lavorando in applicazione semplice grafico a barre, Usare per sviluppare questa applicazione, quindi cerco di realizzare il grafico a barre, ma ottengo la questione si trovano inCome implementare il grafico a barre in iPhone?

[__NSCFConstantString sizeWithTextStyle:]: unrecognized selector sent to instance 0x7fb4c' 
    First throw call stack: 

Come risolvere questo problema? aiutarmi

Grazie in anticipo

ho provato questo:

Viewcontroller.h

#import <UIKit/UIKit.h> 
#import "CorePlot-CocoaTouch.h" 


@interface GraphViewController : UIViewController <CPTPlotDataSource> 
{ 
    CPTXYGraph *barChart; 
    NSTimer *timer; 
    NSMutableArray *samples; 
} 

-(void) getGraphValues; 

@end 

Viewcontroller.m

- (void)viewDidLoad 
    { 
     [super viewDidLoad]; 

     self.view.backgroundColor=[UIColor whiteColor]; 
     self.title = @"Sample"; 
     self.navigationController.navigationBar.barStyle = UIBarStyleBlack; 
     [self.navigationController setNavigationBarHidden:NO]; 

     [self getGraphValues]; 

     double xAxisLength = [samples count]; 

     barChart = [[CPTXYGraph alloc] initWithFrame:CGRectMake(0, 0, 320, 380)]; 

     barChart.plotAreaFrame.borderLineStyle = nil; 
     barChart.plotAreaFrame.cornerRadius = 0.0f; 

     barChart.paddingLeft = 0.0f; 
     barChart.paddingRight = 0.0f; 
     barChart.paddingTop = 0.0f; 
     barChart.paddingBottom = 0.0f; 

     barChart.plotAreaFrame.paddingLeft = 60.0; 
     barChart.plotAreaFrame.paddingTop = 40.0; 
     barChart.plotAreaFrame.paddingRight = 10.0; 
     barChart.plotAreaFrame.paddingBottom = 40.0; 

     barChart.title = @"Sample Innovations"; 

     CPTMutableTextStyle *textStyle = [CPTTextStyle textStyle]; 
     textStyle.color = [CPTColor grayColor]; 
     textStyle.fontSize = 16.0f; 
     textStyle.textAlignment = CPTTextAlignmentCenter; 
     barChart.titleTextStyle = textStyle; // Error found here 
     barChart.titleDisplacement = CGPointMake(0.0f, -10.0f); 
     barChart.titlePlotAreaFrameAnchor = CPTRectAnchorTop; 

     CPTXYAxisSet *axisSet = (CPTXYAxisSet *)barChart.axisSet; 
     CPTXYAxis *x = axisSet.xAxis; 
     x.axisLineStyle = nil; 
     x.majorTickLineStyle = nil; 
     x.minorTickLineStyle = nil; 
     x.majorIntervalLength = CPTDecimalFromString(@"10"); 
     x.orthogonalCoordinateDecimal = CPTDecimalFromString(@"0"); 
     x.title = @"Names"; 
     x.titleLocation = CPTDecimalFromFloat(7.5f); 
     x.titleOffset = 25.0f; 

     // Define some custom labels for the data elements 
     x.labelRotation = M_PI/5; 
     x.labelingPolicy = CPTAxisLabelingPolicyNone; 

     NSArray *customTickLocations = [NSArray arrayWithObjects:[NSDecimalNumber numberWithInt:0], [NSDecimalNumber numberWithInt:1], [NSDecimalNumber numberWithInt:2], [NSDecimalNumber numberWithInt:3], [NSDecimalNumber numberWithInt:4], nil]; 


     NSArray *xAxisLabels = [NSArray arrayWithObjects:@"a", @"b", @"c", @"d", @"e", nil]; 
     NSUInteger labelLocation = 0; 

     NSMutableArray *customLabels = [NSMutableArray arrayWithCapacity:[xAxisLabels count]]; 
     for (NSNumber *tickLocation in customTickLocations) 
     { 
      CPTAxisLabel *newLabel = [[CPTAxisLabel alloc] initWithText: [xAxisLabels objectAtIndex:labelLocation++] textStyle:x.labelTextStyle]; 
      newLabel.tickLocation = [tickLocation decimalValue]; 
      newLabel.offset = x.labelOffset + x.majorTickLength; 
      newLabel.rotation = M_PI/xAxisLength; 
      [customLabels addObject:newLabel]; 
     } 

     x.axisLabels = [NSSet setWithArray:customLabels]; 

     CPTXYAxis *y = axisSet.yAxis; 
     y.axisLineStyle = nil; 
     y.majorTickLineStyle = nil; 
     y.minorTickLineStyle = nil; 
     y.majorIntervalLength = CPTDecimalFromString(@"50"); 
     y.orthogonalCoordinateDecimal = CPTDecimalFromString(@"0"); 
     y.title = @"Work Status"; 
     y.titleOffset = 40.0f; 
     y.titleLocation = CPTDecimalFromFloat(150.0f); 

     CPTGraphHostingView *hostingView = [[CPTGraphHostingView alloc] initWithFrame:CGRectMake(0, 0, 320, 360)]; 
     hostingView.hostedGraph = barChart; 
     [self.view addSubview:hostingView]; 

     CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) barChart.defaultPlotSpace; 
     plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0.0f) length:CPTDecimalFromDouble(16.0f)]; 
     plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0.0f) length:CPTDecimalFromDouble(500.0f)]; 

     CPTBarPlot *barPlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor blueColor] horizontalBars:NO]; 
     barPlot.plotRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0.0) length:CPTDecimalFromDouble(10)];//xAxisLength 
     barPlot.barOffset = CPTDecimalFromFloat(0.25f); 
     barPlot.baseValue = CPTDecimalFromString(@"0"); 
     barPlot.barWidth = CPTDecimalFromFloat(10.0f); 
     barPlot.cornerRadius = 2.0f; 
     barPlot.dataSource = self; 
     [barChart addPlot:barPlot]; 
    } 

    -(void) getGraphValues 
    { 
     int barValues [] = {10,50,100,200};//,150,200,10,20,30,40,50,100,400,450,350 
     int barNums = sizeof(barValues)/sizeof(int); 

     samples = [[NSMutableArray alloc] initWithCapacity:barNums]; 

     for (int i = 0; i < 4; i++) 
     { 
      double x = i; 
      double y = barValues[i]; 
      NSLog(@"XVal : %@", X_VAL); 
      NSDictionary *sample = [NSDictionary dictionaryWithObjectsAndKeys: 
            [NSNumber numberWithDouble:30],X_VAL,[NSNumber numberWithDouble:y],Y_VAL,nil]; 
      [samples addObject:sample]; 
     } 
    } 


-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot 
{ 
    return [samples count]; 
} 

-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index 
{ 
    NSDictionary *sample = [samples objectAtIndex:index]; 

    if (fieldEnum == CPTScatterPlotFieldX) 
     return [sample valueForKey:X_VAL]; 
    else 
     return [sample valueForKey:Y_VAL]; 
} 
+0

Sai cosa significa che il messaggio di errore, corretto? (E aggiungendo lo stack di chiamate al punto di errore sarebbe molto utile nella diagnosi di questo.) –

risposta

17

assicurarsi di impostare il "altra bandiera linker" -all_load nelle impostazioni di generazione. Quel flag forza il sistema a caricare tutti i metodi di categoria come -sizeWithTextStyle:.

+0

Grazie per la risposta – SampathKumar

+0

dispiace dirlo, può u si prega di geive alcun esempio di questo – SampathKumar

+2

Hai letto il [wiki Plot Core] (https://code.google.com/p/core-plot/wiki/UsingCorePlotInApplications)? –

10

Come ha spiegato Eric, è necessario SE la bandiera -all_load nelle impostazioni di generazione. Nel caso in cui ti stia chiedendo dove sia esattamente dare un'occhiata a questa immagine. Buona fortuna!

Setting the all_add flag on XCode

+0

Per tutti coloro che hanno avuto lo stesso problema riscontrato con la localizzazione delle impostazioni del linker, accertarsi che siano selezionate le impostazioni "Tutte" invece delle impostazioni di "Base" predefinite. Odio fare file. – Hampden123

Problemi correlati