我有一个包含多个列的图表和几个覆盖的条形图。最初,这导致内存不足,即使它在Xcode乐器中仅显示2MB的使用。
现在,当我尝试拖动/滚动时,它在没有任何内存通知的情况下崩溃。
我在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];
}
如果我减少了条形图的数量,它会让我拖一些,但最终它会崩溃。
其他人有类似的问题吗?
顺便说一下这是最新的代码(11/5/2011)。
答案 0 :(得分:0)
collapsesLayers = YES
解决了这个问题 - 感谢Eric。
仅供参考这是一个显示特定月份产品数量的业务图表,这就是条形图数量如此之高的原因。如果有不同的方法,请告知。
答案 1 :(得分:0)
如果您使用单个collapsesLayers = YES
制作多个图表,请不要使用CPTGraphHostingView
,而是使用类似这样的内容来防止表格视图的cellForRowAtIndexPath
方法中的内存崩溃问题:< / p>
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;