我在简单的条形图应用程序中工作,使用Coreplot
开发此应用程序,然后我尝试实现条形图,但我得到了
[__NSCFConstantString sizeWithTextStyle:]: unrecognized selector sent to instance 0x7fb4c'
First throw call stack:
如何解决这个问题? 请帮帮我
先谢谢
我试过了:
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 :(得分:17)
确保设置-all_load
和#34;其他链接器标记&#34;在构建设置中。该标志强制系统加载所有类别方法,如-sizeWithTextStyle:
。
答案 1 :(得分:10)
正如Eric所解释的那样,您需要在构建设置中看到-all_load标志。 万一你想知道这到底在哪里看看这张照片。 祝你好运!