[CPTPlotRange objCType]:发送到实例的无法识别的选择器

[CPTPlotRange objCType]: unrecognized selector sent to instance

我正在尝试将实时绘图示例从 core-plot 实施到我的 ios 项目中,我不断收到 [CPTPlotRange objCType]: unrecognized selector sent to instance 这似乎正在停止 CPTAnimation 以将图形移动到最新值。

这几乎是我所有的代码,我不明白为什么会出现这个问题

-(id)initWithGraphView:(CPTGraphHostingView *) gView name:(NSString *)label {
    self = [super init];

    if(self) {
        _graphView = gView;
        CGRect bounds = _graphView.bounds;
        _graph = [[CPTXYGraph alloc] initWithFrame:bounds];
        _graphView.hostedGraph = _graph;
        _currentIndex = 0;
        _plotData = [[NSMutableArray alloc] initWithCapacity:kMaxDataPoints];
        [_plotData removeAllObjects];


        CPTMutableLineStyle *majorGridLineStyle = [CPTMutableLineStyle lineStyle];
        majorGridLineStyle.lineWidth = 0.75;
        majorGridLineStyle.lineColor = [[CPTColor colorWithGenericGray:CPTFloat(0.2)] colorWithAlphaComponent:CPTFloat(0.75)];

        CPTMutableLineStyle *minorGridLineStyle = [CPTMutableLineStyle lineStyle];
        minorGridLineStyle.lineWidth = 0.25;
        minorGridLineStyle.lineColor = [[CPTColor whiteColor] colorWithAlphaComponent:CPTFloat(0.1)];

        // Axes
        // X axis
        CPTXYAxisSet *axisSet = (CPTXYAxisSet *)_graph.axisSet;
        CPTXYAxis *x          = axisSet.xAxis;
        x.labelingPolicy        = CPTAxisLabelingPolicyAutomatic;
        x.orthogonalPosition    = @0.0;
        x.majorGridLineStyle    = majorGridLineStyle;
        x.minorGridLineStyle    = minorGridLineStyle;
        x.minorTicksPerInterval = 9;
        x.title                 = @"X Axis";

        NSNumberFormatter *labelFormatter = [[NSNumberFormatter alloc] init];
        labelFormatter.numberStyle = NSNumberFormatterNoStyle;
        x.labelFormatter           = labelFormatter;

        // Y axis
        CPTXYAxis *y = axisSet.yAxis;
        y.labelingPolicy        = CPTAxisLabelingPolicyAutomatic;
        y.orthogonalPosition    = @0.0;
        y.majorGridLineStyle    = majorGridLineStyle;
        y.minorGridLineStyle    = minorGridLineStyle;
        y.minorTicksPerInterval = 3;
        y.title                 = @"Y Axis";
        y.axisConstraints       = [CPTConstraints constraintWithLowerOffset:0.0];

        // Rotate the labels by 45 degrees, just to show it can be done.
        x.labelRotation = CPTFloat(M_PI_4);

        // Create the plot
        CPTScatterPlot *dataSourceLinePlot = [[CPTScatterPlot alloc] init];
        dataSourceLinePlot.identifier     = kPlotIdentifier;
        dataSourceLinePlot.cachePrecision = CPTPlotCachePrecisionDouble;
        dataSourceLinePlot.interpolation = CPTScatterPlotInterpolationCurved;

        CPTMutableLineStyle *lineStyle = [dataSourceLinePlot.dataLineStyle mutableCopy];
        lineStyle.lineWidth              = 3.0;
        lineStyle.lineColor              = [CPTColor greenColor];
        dataSourceLinePlot.dataLineStyle = lineStyle;

        dataSourceLinePlot.dataSource = self;
        [_graph addPlot:dataSourceLinePlot];

        // Plot space
        CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)_graph.defaultPlotSpace;
        plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@(kMaxDataPoints - 2)];
        plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:@0.0 length:@1000000.0];

    }

    return self;
}

-(void)newData:(int)value
{
    NSLog(@"adding, %i", value);
    CPTGraph *theGraph = _graph;
    CPTPlot *thePlot   = [theGraph plotWithIdentifier:kPlotIdentifier];

    if ( thePlot ) {
        if ( self.plotData.count >= kMaxDataPoints ) {
            [self.plotData removeObjectAtIndex:0];
            [thePlot deleteDataInIndexRange:NSMakeRange(0, 1)];
        }

        CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)_graph.defaultPlotSpace;
        NSUInteger location       = (self.currentIndex >= kMaxDataPoints ? self.currentIndex - kMaxDataPoints + 2 : 0);

        CPTPlotRange *oldRange = [CPTPlotRange plotRangeWithLocation:@( (location > 0) ? (location - 1) : 0 )
                                                              length:@(kMaxDataPoints - 2)];
        CPTPlotRange *newRange = [CPTPlotRange plotRangeWithLocation:@(location)
                                                              length:@(kMaxDataPoints - 2)];

        [CPTAnimation animate:plotSpace
                     property:@"xRange"
                fromPlotRange:oldRange
                  toPlotRange:newRange
                     duration:CPTFloat(1.0 / kFrameRate)];

        self.currentIndex++;
        [self.plotData addObject:@(value)];
        [thePlot insertDataAtIndex:self.plotData.count - 1 numberOfRecords:1];
    }
}

-(NSUInteger)numberOfRecordsForPlot:(nonnull CPTPlot *)plot
{
    return _plotData.count;
}

-(nullable id)numberForPlot:(nonnull CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index
{
    NSNumber *num = nil;

    switch ( fieldEnum ) {
        case CPTScatterPlotFieldX:
            num = @(index + _currentIndex - _plotData.count);
            break;

        case CPTScatterPlotFieldY:
            num = _plotData[index];
            break;

        default:
            break;
    }

    return num;
}

Core Plot 2.1 中存在一个错误,导致在动画绘图范围时出现此错误。已经在master分支修复,下个版本会出现

与此同时,您可以从 GitHub 拉取最新代码或将 Cocoapods 指向 master 上的最新代码,而不是指向发布包 (pod 'CorePlot', :git => 'https://github.com/core-plot/core-plot.git')。