2012-09-08 18 views
9

pracuję w prosty pasku aplikacji wykresie Korzystanie rozwijać tę aplikację, a następnie próbuję wdrożyć wykres słupkowy, ale pojawia się problem znaleziono wJak zaimplementować wykres słupkowy w telefonie iPhone?

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

Jak rozwiązać ten problem? pomóż mi

z góry dzięki

Próbowałem to:

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

Wiesz, co oznacza ten komunikat o błędzie, prawda? (Dodanie stosu wywołań w punkcie błędu byłoby bardzo pomocne w zdiagnozowaniu tego problemu). –

Odpowiedz

17

Upewnij się, że ustawiłeś "inną flagę linkera" -all_load w ustawieniach kompilacji. Ta flaga wymusza na systemie załadowanie wszystkich metod kategorii, takich jak -sizeWithTextStyle:.

+0

Dzięki za odpowiedź – SampathKumar

+0

Przykro mi to mówić, proszę, zrób przykład dla tego – SampathKumar

+2

Czy przeczytałeś [wiki wiki]? https://code.google.com/p/core-plot/wiki/UsingCorePlotInApplications)? –

10

Jak wyjaśnił Eric, musisz ustawić opcję -all_load w ustawieniach kompilacji. Jeśli zastanawiasz się, gdzie dokładnie jest to zdjęcie. Powodzenia!

Setting the all_add flag on XCode

+0

Dla wszystkich, którzy mieli takie same problemy jak lokalizowanie ustawień łącznika, upewnij się, że wybrano "Wszystkie" ustawienia zamiast domyślnych ustawień "Podstawowe". Nienawidzę tworzyć plików. – Hampden123