2012-09-08 7 views
9

Je travaille en simple application graphique à barres, l'aide pour développer cette application, alors je tente de mettre en œuvre le diagramme à barres, mais je reçois la question trouvé dansComment mettre en œuvre un graphique à barres dans l'iPhone?

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

Comment résoudre ce problème? s'il vous plaît aidez-moi

Merci à l'avance

J'ai essayé ceci:

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

Vous savez ce que ce message d'erreur signifie, non? (Et ajouter la pile d'appel au point d'erreur serait très utile pour diagnostiquer ceci.) –

Répondre

17

Assurez-vous que vous avez défini -all_load "autre indicateur de lien" dans les paramètres de construction. Ce drapeau oblige le système à charger toutes les méthodes de catégorie telles que -sizeWithTextStyle:.

+0

Merci pour votre réponse – SampathKumar

+0

Désolé de dire ceci, pouvez-vous s'il vous plaît donner un exemple pour ceci – SampathKumar

+2

Avez-vous lu le [wiki de Core Plot] (https://code.google.com/p/core-plot/wiki/UsingCorePlotInApplications)? –

10

Comme Eric l'a expliqué, vous devez afficher l'indicateur -all_load dans les paramètres de construction. Dans le cas où vous vous demandez où cela est exactement jeter un oeil à cette image. Bonne chance!

Setting the all_add flag on XCode

+0

Pour tous ceux qui ont eu le même problème que moi pour localiser les paramètres de l'éditeur de liens, assurez-vous que les paramètres "Tous" sont sélectionnés au lieu des paramètres "Basic" par défaut. Je déteste faire des fichiers. – Hampden123

Questions connexes