Базовый участок "numberForPlot" не выполняется должным образом - PullRequest
0 голосов
/ 20 февраля 2012

Я пытаюсь выучить CorePlot. Я нашел пример кода из «codejunkster», которому следовал до «T», но он не работает. Я сузил его до метода numberForPlot. Код ниже. Ни одно из условий не выполняется, и я не могу понять, почему.

-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index
{
    if ( [plot.identifier isEqual:@"chocoplot"] )
    {
        NSDictionary *bar = [self.dataForChart objectAtIndex:index];

        if(fieldEnum == CPTBarPlotFieldBarLocation)
        {
            return [bar valueForKey:BAR_POSITION];
            NSLog(@"return [bar valueForKey:BAR_POSITION]");
        }
        else if(fieldEnum ==CPTBarPlotFieldBarTip){
            NSLog(@"return [bar valueForKey:BAR_HEIGHT];");
            return [bar valueForKey:BAR_HEIGHT];
        }
    }
   return [NSNumber numberWithFloat:0];
}

В соответствии с руководством ниже приведен фрагмент кода, который определяет CPTBarPlot ...

// Create bar plot and add it to the graph
CPTBarPlot *plot = [[CPTBarPlot alloc] init] ;
plot.dataSource = self;
plot.delegate = self;
plot.barWidth = [[NSDecimalNumber decimalNumberWithString:@"5.0"]
                 decimalValue];
plot.barOffset = [[NSDecimalNumber decimalNumberWithString:@"10.0"]
                  decimalValue];
plot.barCornerRadius = 5.0;
// Remove bar outlines
CPTMutableLineStyle *borderLineStyle = [CPTMutableLineStyle lineStyle];
borderLineStyle.lineColor = [CPTColor clearColor];
plot.lineStyle = borderLineStyle;

// Identifiers are handy if you want multiple plots in one graph
plot.identifier = @"chocoplot";

[self.graph addPlot:plot];

Ответы [ 2 ]

2 голосов
/ 20 февраля 2012

Определение перечисления изменилось еще в январе:

typedef enum _CPTBarPlotField {
    CPTBarPlotFieldBarLocation, ///< Bar location on independent coordinate axis.
    CPTBarPlotFieldBarTip,      ///< Bar tip value.
    CPTBarPlotFieldBarBase      ///< Bar base (used only if @link CPTBarPlot::barBasesVary barBasesVary @endlink is YES).
} CPTBarPlotField;

Убедитесь, что тест identifier пройден. Если это так, и по какой-то причине компилятор все еще имеет старые значения enum, попробуйте чистую сборку.

0 голосов
/ 20 февраля 2012

Возможно, это ошибка или вы инициализировали другой тип графика.

Вот декларация CPTBarPlotField

/**     @brief Enumeration of bar plot data source field types
 **/
typedef enum _CPTBarPlotField {
    CPTBarPlotFieldBarLocation = 2,  ///< Bar location on independent coordinate axis.
    CPTBarPlotFieldBarTip         = 3,  ///< Bar tip value.
    CPTBarPlotFieldBarBase     = 4      ///< Bar base (used only if barBasesVary is YES).
} CPTBarPlotField;

Как видите, значение 1 не может быть возвращено CPTBarPlot. Проверьте свой код, где вы инициализируете график.

...