Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c [\uu NSArrayI count]:发送到解除分配实例iPhone的消息_Objective C_Ios_Instance_Allocation - Fatal编程技术网

Objective c [\uu NSArrayI count]:发送到解除分配实例iPhone的消息

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

我有一个绘制散点图的方法,我得到了错误[\u NSArrayI count]:发送到deallocated实例的消息

我做了一个调试,错误就在这一行

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