私のiPhoneアプリでは、2つの別々のバープロットを持つビューがあります。各プロットには、異なる数のデータ要素があります。各プロットの各バーに適切なデータでラベルを付けたいのですが、「dataLabelForPlot」メソッドでは「CPTTextLayer」のインスタンスが1つしか許可されていないようです。CPTTextLayerをプロットとそのデータの関数にしたいと思います。
プロットには、「棒グラフ1」と「棒グラフ2」という別々の識別子があります。「numberOfRecordsForPlot」メソッドと「numberForPlot」メソッドで条件付きifステートメントを使用できますが、「dataLabelForPlot」メソッドで失敗し、「label」が未使用の変数であるというエラーが表示されます。それが条件文で定義されているのを見ると、私には非常に奇妙に思えます。
私のコードは次のようになります。
#pragma mark Plot Data Source Methods
-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot {
if (plot.identifier == @"Bar Plot 1") {
return 5; }
else { return 4; }
}
-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index {
NSDecimalNumber *num = nil;
if (plot.identifier == @"Bar Plot 1") {
switch ( fieldEnum ) {
case CPTBarPlotFieldBarLocation:
num = (NSDecimalNumber *)[NSDecimalNumber numberWithUnsignedInteger:index];
break;
case CPTBarPlotFieldBarTip:
num = (NSDecimalNumber *)[dataTemp1 objectAtIndex:index];
break;
}
}
else {
switch ( fieldEnum ) {
case CPTBarPlotFieldBarLocation:
num = (NSDecimalNumber *)[NSDecimalNumber numberWithUnsignedInteger:index];
break;
case CPTBarPlotFieldBarTip:
num = (NSDecimalNumber *)[dataTemp2 objectAtIndex:index];
break;
}
}
return num;
}
-(CPTLayer *)dataLabelForPlot:(CPTPlot *)plot recordIndex:(NSUInteger)index {
if (plot.identifier == @"Bar Plot 1") {
CPTTextLayer *label = [[CPTTextLayer alloc] initWithText:[NSString stringWithFormat:@"%@", [dataTemp1 objectAtIndex:index]]];
}
else { CPTTextLayer *label = [[CPTTextLayer alloc] initWithText:[NSString stringWithFormat:@"%@", [dataTemp2 objectAtIndex:index]]]; }
CPTMutableTextStyle *textStyle = [label.textStyle mutableCopy];
textStyle.color = [CPTColor redColor];
label.textStyle = textStyle;
[textStyle release];
return [label autorelease];
}