Objective c [\uu NSArrayI count]:发送到解除分配实例iPhone的消息
我有一个绘制散点图的方法,我得到了错误[\u NSArrayI count]:发送到deallocated实例的消息 我做了一个调试,错误就在这一行Objective c [\uu NSArrayI count]:发送到解除分配实例iPhone的消息,objective-c,ios,instance,allocation,Objective C,Ios,Instance,Allocation,我有一个绘制散点图的方法,我得到了错误[\u NSArrayI count]:发送到deallocated实例的消息 我做了一个调试,错误就在这一行 [plotSpace scaleToFitPlots:[NSArray arrayWithObjects:aaplPlot, googPlot, msftPlot, nil]]; 我认为释放对象有问题,但我不知道如何解决这个问题。我在第二次调用该方法时得到错误 方法如下: -(void)configurePlots { // 1
[plotSpace scaleToFitPlots:[NSArray arrayWithObjects:aaplPlot, googPlot, msftPlot, nil]];
我认为释放对象有问题,但我不知道如何解决这个问题。我在第二次调用该方法时得到错误
方法如下:
-(void)configurePlots {
// 1 - Get graph and plot space
CPTGraph *graph = self.hostView.hostedGraph;
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace;
// 2 - Create the three plots
CPTScatterPlot *aaplPlot = [[CPTScatterPlot alloc] init];
aaplPlot.dataSource = self;
aaplPlot.identifier = CPDTickerSymbolAAPL;
CPTColor *aaplColor = [CPTColor redColor];
[graph addPlot:aaplPlot toPlotSpace:plotSpace];
CPTScatterPlot *googPlot = [[CPTScatterPlot alloc] init];
googPlot.dataSource = self;
googPlot.identifier = CPDTickerSymbolGOOG;
CPTColor *googColor = [CPTColor greenColor];
[graph addPlot:googPlot toPlotSpace:plotSpace];
CPTScatterPlot *msftPlot = [[CPTScatterPlot alloc] init];
msftPlot.dataSource = self;
msftPlot.identifier = CPDTickerSymbolMSFT;
CPTColor *msftColor = [CPTColor blueColor];
[graph addPlot:msftPlot toPlotSpace:plotSpace];
// 3 - Set up plot space
// Here is the problem//
[plotSpace scaleToFitPlots:[NSArray arrayWithObjects:aaplPlot, googPlot, msftPlot, nil]];
CPTMutablePlotRange *xRange = [plotSpace.xRange mutableCopy];
[xRange expandRangeByFactor:CPTDecimalFromCGFloat(1.1f)];
plotSpace.xRange = xRange;
CPTMutablePlotRange *yRange = [plotSpace.yRange mutableCopy];
[yRange expandRangeByFactor:CPTDecimalFromCGFloat(1.2f)];
plotSpace.yRange = yRange;
// 4 - Create styles and symbols
CPTMutableLineStyle *aaplLineStyle = [aaplPlot.dataLineStyle mutableCopy];
aaplLineStyle.lineWidth = 2.5;
aaplLineStyle.lineColor = aaplColor;
aaplPlot.dataLineStyle = aaplLineStyle;
CPTMutableLineStyle *aaplSymbolLineStyle = [CPTMutableLineStyle lineStyle];
aaplSymbolLineStyle.lineColor = aaplColor;
CPTPlotSymbol *aaplSymbol = [CPTPlotSymbol ellipsePlotSymbol];
aaplSymbol.fill = [CPTFill fillWithColor:aaplColor];
aaplSymbol.lineStyle = aaplSymbolLineStyle;
aaplSymbol.size = CGSizeMake(6.0f, 6.0f);
aaplPlot.plotSymbol = aaplSymbol;
CPTMutableLineStyle *googLineStyle = [googPlot.dataLineStyle mutableCopy];
googLineStyle.lineWidth = 1.0;
googLineStyle.lineColor = googColor;
googPlot.dataLineStyle = googLineStyle;
CPTMutableLineStyle *googSymbolLineStyle = [CPTMutableLineStyle lineStyle];
googSymbolLineStyle.lineColor = googColor;
CPTPlotSymbol *googSymbol = [CPTPlotSymbol starPlotSymbol];
googSymbol.fill = [CPTFill fillWithColor:googColor];
googSymbol.lineStyle = googSymbolLineStyle;
googSymbol.size = CGSizeMake(6.0f, 6.0f);
googPlot.plotSymbol = googSymbol;
CPTMutableLineStyle *msftLineStyle = [msftPlot.dataLineStyle mutableCopy];
msftLineStyle.lineWidth = 2.0;
msftLineStyle.lineColor = msftColor;
msftPlot.dataLineStyle = msftLineStyle;
CPTMutableLineStyle *msftSymbolLineStyle = [CPTMutableLineStyle lineStyle];
msftSymbolLineStyle.lineColor = msftColor;
CPTPlotSymbol *msftSymbol = [CPTPlotSymbol diamondPlotSymbol];
msftSymbol.fill = [CPTFill fillWithColor:msftColor];
msftSymbol.lineStyle = msftSymbolLineStyle;
msftSymbol.size = CGSizeMake(6.0f, 6.0f);
msftPlot.plotSymbol = msftSymbol;
}
我做了一些更改:我创建了graph、plotSpace、array、aaplplplot、googPlot和msftPlot属性,并使用散点图分配和初始化数组
array = [[NSArray alloc] initWithObjects:aaplPlot, googPlot, msftPlot, nil];
[plotSpace scaleToFitPlots:array];
当第二次调用该方法时,我得到了相同的错误 self.hostView.hostedGraph正在发布。将其创建为具有保留值或强值的属性,然后再次检查。因为这只发生在第二次运行时,所以看起来您的对象在使用后被释放
@property (nonatomic, strong) CPTGraph *graph;
上面的plotSpace位于方法中,请尝试将其作为静态变量或类属性,以便不释放它,并检查是否再次初始化。如果是属性。@giorashc我想ARC会释放数组,但在下一个语句之前确保计数正确将确保这是问题所在。您应该在回答中对此进行解释。这看起来更像是猜测而不是回答,但数组是动态生成的,因此您如何检查它?错误在同一行。在NSArray*数组后面设置一个断点以检查计数。这仍然不是100%会有帮助。您需要调试plotting类中使用此数组的行,确保对象不是零,因为您说这只发生在第二次运行时。在崩溃之前放置一个断点,然后检查图形和其他对象。我相信这样做后你会找到答案的。另外,您使用的是ARC吗?可以猜测plotSpace为零,而不是新阵列。graph.defaultPlotSpace是否为零?NSArray已自动删除,请保留它。响应将使调试此问题变得更容易。没有回复,我们无法发布准确答案。这就是为什么我删除了我以前的答案。。。
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace;