Проблемы с запуском учебника Core Plot - PullRequest
1 голос
/ 10 июня 2010

Я следую учебному пособию о базовом графике здесь ... http://www.switchonthecode.com/tutorials/using-core-plot-in-an-iphone-application

Я получаю ошибки со следующими строками кода

//SAYING INCOMPATIBLE TYPE FOR AURGUMENT 1 'setMajorIntervalLength'
axisSet.xAxis.majorIntervalLength = [NSDecimalNumber decimalNumberWithString:@"5"];

// request for member 'axisLabelOffset' in something not a structure or union
axisSet.xAxis.axisLabelOffset = 3.0f;

//request for member 'bounds' in something not a structure or union
CPScatterPlot *xSquaredPlot = [[[CPScatterPlot alloc] initWithFrame:graph.defaultPlotSpace.bounds] autorelease];

Вот мой код сейчасЯ больше не получаю никаких ошибок компилятора, но он вылетает и не загружается представление, пожалуйста, посмотрите, если вы можете

  @implementation FirstCorePlotViewController

 (void)viewDidLoad 
{

      [super viewDidLoad];

      graph = [[CPXYGraph alloc] initWithFrame: self.view.bounds];

      CPLayerHostingView *hostingView = (CPLayerHostingView *)self.view;
      hostingView.hostedLayer = graph;
      graph.paddingLeft = 20.0;
      graph.paddingTop = 20.0;
      graph.paddingRight = 20.0;
      graph.paddingBottom = 20.0;

        CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace;
     plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-6)
                                              length:CPDecimalFromFloat(12)];
     plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-5)
                                               length:CPDecimalFromFloat(30)];

      CPXYAxisSet *axisSet = (CPXYAxisSet *)graph.axisSet;

          CPLineStyle *lineStyle = [CPLineStyle lineStyle];
      lineStyle.lineColor = [CPColor blackColor];
          lineStyle.lineWidth = 2.0f;

      axisSet.xAxis.majorIntervalLength =CPDecimalFromString(@"5");
      axisSet.xAxis.minorTicksPerInterval = 4;
      axisSet.xAxis.majorTickLineStyle = lineStyle;
      axisSet.xAxis.minorTickLineStyle = lineStyle;
      axisSet.xAxis.axisLineStyle = lineStyle;
      axisSet.xAxis.minorTickLength = 5.0f;
      axisSet.xAxis.majorTickLength = 7.0f;
      axisSet.xAxis.labelOffset = 3.0f;

      axisSet.yAxis.majorIntervalLength = CPDecimalFromString(@"5");
      axisSet.yAxis.minorTicksPerInterval = 4;
      axisSet.yAxis.majorTickLineStyle = lineStyle;
      axisSet.yAxis.minorTickLineStyle = lineStyle;
      axisSet.yAxis.axisLineStyle = lineStyle;
      axisSet.yAxis.minorTickLength = 5.0f;
      axisSet.yAxis.majorTickLength = 7.0f;
      axisSet.yAxis.labelOffset = 3.0f;

     CPScatterPlot *xSquaredPlot = [[(CPScatterPlot *)[CPScatterPlot alloc] initWithFrame:graph.bounds] autorelease];


        xSquaredPlot.identifier = @"X Squared Plot";
    xSquaredPlot.dataLineStyle.lineWidth = 1.0f;
    xSquaredPlot.dataLineStyle.lineColor = [CPColor redColor];
    xSquaredPlot.dataSource = self;
    [graph addPlot:xSquaredPlot];

    CPPlotSymbol *greenCirclePlotSymbol = [CPPlotSymbol ellipsePlotSymbol];
        greenCirclePlotSymbol.fill = [CPFill fillWithColor:[CPColor greenColor]];
    greenCirclePlotSymbol.size = CGSizeMake(2.0, 2.0);
    //xSquaredPlot.defaultPlotSymbol = greenCirclePlotSymbol;  

    CPScatterPlot *xInversePlot = [[(CPScatterPlot *)[CPScatterPlot alloc] initWithFrame:graph.bounds] autorelease];    
    xInversePlot.identifier = @"X Inverse Plot";
    xInversePlot.dataLineStyle.lineWidth = 1.0f;
    xInversePlot.dataLineStyle.lineColor = [CPColor blueColor];
    xInversePlot.dataSource = self;
    [graph addPlot:xInversePlot];
}

-(NSUInteger)numberOfRecords 
 {

        return 51;
 }

-(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum  
           recordIndex:(NSUInteger)index
 {
        double val = (index/5.0)-5;
    if(fieldEnum == CPScatterPlotFieldX)
    { 

             return [NSNumber numberWithDouble:val]; 
     }
    else
    {
       if(plot.identifier == @"X Squared Plot")
       {
                   return [NSNumber numberWithDouble:val*val]; 
        }
       else
       {
                     return [NSNumber numberWithDouble:1/val];
       }
 }
}

 @end

Ответы [ 4 ]

1 голос
/ 11 июня 2010

Ни одна из этих ошибок не вызвана проблемами #import.Известно, что это руководство несколько устарело, и некоторые части инфраструктуры Core Plot изменились.

  • Свойство majorIntervalLength ожидает NSDecimal, а не NSDecimalNumer.Базовый график включает в себя несколько служебных функций, которые преобразуют другие типы в NSDecimal, такие как CPDecimalFromString и CPDecimalFromDouble.

axisSet.xAxis.majorIntervalLength = CPDecimalFromString(@"5");

  • Свойство axisLabelOffset было переименованона labelOffset.

  • Третья ошибка вызвана двумя причинами.И UIView, и CPLayer (корневой класс для всех слоев Core Plot) имеют метод -initWithFrame :.Поскольку -alloc возвращает id, компилятор не знает, какой -initWithFrame: использовать, а иногда угадывает.Вы можете исправить это с помощью Typecast.Кроме того, пространства заговора не являются слоями;просто получите границы графика.

CPScatterPlot *xSquaredPlot = [[(CPScatterPlot *)[CPScatterPlot alloc] initWithFrame:graph.bounds] autorelease];
0 голосов
/ 21 ноября 2012

Следуйте за этим Тутом

Этот урок Рэя действительно полезен.

0 голосов
/ 12 июня 2010

В вашем методе -numberForPlot:field:recordIndex: есть ошибка деления на ноль.Когда индекс == 25, оператор 1/val взорвется.

0 голосов
/ 11 июня 2010

// request for member 'axisLabelOffset' in something not a structure or union

... означает, что компилятор не распознает имя, указанное в синтаксисе точки, как принадлежащее объекту. Опечатки являются частой причиной этой ошибки. Другой - неправильно импортировать заголовок для класса, предшествующего точке.

//SAYING INCOMPATIBLE TYPE FOR AURGUMENT 1 'setMajorIntervalLength'

Это означает, что свойство majorIntervalLength не принимает NSDecimalNumber.

Я скажу, что все ваши проблемы вызваны проблемами с #import утверждениями. Вы не импортируете заголовки, где должны быть, и компилятор не понимает, какой символ идет с каким классом.

...