Сбой основного графика при перетаскивании / прокрутке

#ios #core-plot

#iOS #основной график

Вопрос:

У меня есть график с несколькими столбцами и несколькими наложенными столбчатыми диаграммами. первоначально это вызывало нехватку памяти, хотя в инструментах Xcode использовалось всего 2 МБ.

теперь он выходит из строя без какого-либо уведомления о памяти, когда я пытаюсь перетащить / прокрутить.

я проследил это до этого метода в CPTGraphHostingView. после выхода из этого метода он выходит из строя.

 -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{
    CGPoint pointOfTouch = [[[event touchesForView:self] anyObject] locationInView:self];
    if (!collapsesLayers) {
        pointOfTouch = [self.layer convertPoint:pointOfTouch toLayer:hostedGraph];
    } else {
        pointOfTouch.y = self.frame.size.height - pointOfTouch.y;
    }
    [hostedGraph pointingDeviceUpEvent:event atPoint:pointOfTouch];
}
  

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

у кого-нибудь еще есть похожие проблемы?

кстати, это последний код (5.11.2011).

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

1. Сколько столбчатых графиков на вашем графике? Можете ли вы опубликовать сообщение об ошибке и / или трассировку стека после сбоя?

2. Имеется 42 гистограммы. Вообще нет сообщения об ошибке или трассировки стека. экран становится черным с помощью блесны и возвращается к экрану блокировки устройства.

3. Я помещаю точки останова вокруг кода касания в CPTGraphHostingView, чтобы увидеть, есть ли определенная точка сбоя. он выходит из строя только после возврата touchesEnded. кажется, что при перетаскивании что-то происходит — возможно, какое-то переполнение буфера — что вызывает сильный сбой. я не могу быть уверен в этом, поскольку он не выходит из строя в симуляторе.

4. 42 экземпляра CPTBarPlot на одном графике? collapsesLayers ДА или НЕТ? Если НЕТ, попробуйте установить значение «ДА», чтобы сэкономить оперативную память на графическом оборудовании.

Ответ №1:

collapsesLayers = YES исправлена проблема — спасибо, Эрик.

К вашему сведению, это бизнес-график, который показывает количество продуктов за данный месяц, вот почему количество гистограмм настолько велико. Если есть другой способ сделать это, пожалуйста, сообщите.

Ответ №2:

Пожалуйста, не используйте, collapsesLayers = YES если вы создаете несколько диаграмм из одной CPTGraphHostingView , вместо этого используйте что-то подобное, чтобы предотвратить сбой памяти в вашем cellForRowAtIndexPath методе просмотра таблицы:

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"GraphCell" forIndexPath:indexPath];
if(cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"GraphCell"];
}
for (id v in cell.contentView.subviews)
{
    if ([v isKindOfClass:[CPTGraphHostingView class]])
    {
        [v removeFromSuperview];
    }
}

self.hostView = [(CPTGraphHostingView *) [CPTGraphHostingView alloc] initWithFrame:cell.contentView.bounds];
self.hostView.allowPinchScaling = NO;
[cell.contentView addSubview:self.hostView];



/*     Configure Graph           */
// 1 - Create the graph
CPTGraph *graph = [[CPTXYGraph alloc] initWithFrame:CGRectMake(0, 0, 320, 180)];
graph.backgroundColor =[UIColor whiteColor].CGColor;
//1].CGColor;
self.hostView.hostedGraph = graph;