Разное поведение библиотеки CorePlot на Iphone и Ipad

#ios #objective-c #core-plot

#iOS #objective-c #core-plot

Вопрос:

Я пытаюсь нарисовать график с версией библиотеки CorePlot 1.5.1.It нормально, когда приложение запускается на Ipad, но когда оно запускается на Iphone, график не анимируется, и в консоли отладки появляется следующая ошибка

 Assertion failure in -[CPTXYPlotSpace setXRange:], /Users/eskroch/Projects/Core Plot/framework/Source/CPTXYPlotSpace.m:377
  

Код для анимации графика:

 -(void)newData:(NSTimer *)theTimer
{
[Utils logClassObject:self andMethod:_cmd];
if(_beacon)
{
    CPTGraph *theGraph = layerHostingView.hostedGraph;
    CPTPlot *thePlot   = [theGraph plotWithIdentifier:kPlotIdentifier];

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

            CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)theGraph.defaultPlotSpace;
            NSUInteger location       = ([[_arrayOfTime lastObject] intValue] >= kMaxDataPoints ? [[_arrayOfTime lastObject] intValue] - kMaxDataPoints : 0);

            CPTPlotRange *oldRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromUnsignedInteger( (location > 0) ? location : 0 )
                                                                  length:CPTDecimalFromUnsignedInteger(kMaxDataPoints)];
            CPTPlotRange *newRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromUnsignedInteger((location>0 || ([[_arrayOfTime lastObject] intValue] >= kMaxDataPoints))?(location==0?5:location 5):location)
                                                                  length:CPTDecimalFromUnsignedInteger(kMaxDataPoints)];

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


            [_arrayOfRSSI addObject:@(_beacon.rssi)];
            [_arrayOfTime addObject:@(currentIndex*5)];

            [thePlot insertDataAtIndex:_arrayOfRSSI.count - 1 numberOfRecords:1];
            AppDelegate *delegate = (AppDelegate*)[[UIApplication sharedApplication]delegate];
            [delegate.csvData appendFormat:@"%@;", _macAddress!=nil?[Utils stringToHex:_macAddress]:@"0"];

            [delegate.csvData appendFormat:@"%d;",5*currentIndex];
            [delegate.csvData appendFormat:@"%d;n", (int)_beacon.rssi];
        }

        currentIndex  ;
    }
}
}
  

Комментарии:

1. Посмотрите на стек вызовов в Xcode после сбоя утверждения. Где произошел сбой? Был -setXRange: вызван откуда-то из вашего приложения или из чего-то внутреннего для Core Plot? Поскольку опубликованный вами код выглядит нормально и работает на iPad, я подозреваю, что где-то в версии вашего приложения для iPhone есть проблема.

2. @EricSkroch спасибо, я нашел решение из вашего комментария к проблеме 🙂

Ответ №1:

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