#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;