Objective c 超出范围-NSMutableArray错误

Objective c 超出范围-NSMutableArray错误,objective-c,object,nsmutablearray,Objective C,Object,Nsmutablearray,我能找到的大多数教程都只对这类数组中的对象使用NSString -谢谢 亚历克斯E 编辑 data=[[NSMutableArray alloc]initWithCapacity:numsp]retain]; //data=[[NSMUTABLEARRY arrayWithCapacity:NUMISP]retain]; 计数=0; while(计数

我能找到的大多数教程都只对这类数组中的对象使用NSString

-谢谢 亚历克斯E

编辑

data=[[NSMutableArray alloc]initWithCapacity:numsp]retain];
//data=[[NSMUTABLEARRY arrayWithCapacity:NUMISP]retain];
计数=0;
while(计数

仍然是相同的错误,即使在切换“data=”时也是如此。

我能在代码中发现的唯一错误是您的
NSArray
初始化

您的工作地点:

data = [[[NSMutableArray alloc] initWithCapacity:numISF]retain];
//data = [[NSMutableArray arrayWithCapacity:numISF] retain];
count = 0;
while (count < numISF)
{

    [data addObject:[[[rouge_col_data alloc]init]autorelease]];

    count++;

}
你应该做:

data = [[NSMutableArray arrayWithCapacity:numISF] init];
这是因为
arrayWithCapacity
是一个工厂方法,将返回一个自动释放的实例。如果要在此方法之后继续使用该对象,则需要
保留它,并且可以如下所示:

data = [NSMutableArray arrayWithCapacity:numISF];

我能在代码中发现的唯一错误是
NSArray
初始化

您的工作地点:

data = [[[NSMutableArray alloc] initWithCapacity:numISF]retain];
//data = [[NSMutableArray arrayWithCapacity:numISF] retain];
count = 0;
while (count < numISF)
{

    [data addObject:[[[rouge_col_data alloc]init]autorelease]];

    count++;

}
你应该做:

data = [[NSMutableArray arrayWithCapacity:numISF] init];
这是因为
arrayWithCapacity
是一个工厂方法,将返回一个自动释放的实例。如果要在此方法之后继续使用该对象,则需要
保留它,并且可以如下所示:

data = [NSMutableArray arrayWithCapacity:numISF];
  • 您不需要对
    阵列的结果调用
    init
    ,其容量为:
    call
    arrayWithCapacity:
    已返回初始化(但自动删除)的对象。或者,您可以调用
    [[NSMutableArray alloc]initWithCapacity::
  • 您的循环有一个off by one错误;您从零开始,因此将添加一个额外的对象。添加这个额外的对象将会成功-它看起来不像你想要做的
  • 您可能希望
    自动释放要添加到数组中的对象。阵列将自行保留它们。如果您确实需要保留对象本身,这很好,但是让数组为您保留是很常见的
  • 您应该
    保留
    数组本身,否则它将在事件循环结束时消失
  • 您不需要对
    阵列的结果调用
    init
    ,其容量为:
    call
    arrayWithCapacity:
    已返回初始化(但自动删除)的对象。或者,您可以调用
    [[NSMutableArray alloc]initWithCapacity::
  • 您的循环有一个off by one错误;您从零开始,因此将添加一个额外的对象。添加这个额外的对象将会成功-它看起来不像你想要做的
  • 您可能希望
    自动释放要添加到数组中的对象。阵列将自行保留它们。如果您确实需要保留对象本身,这很好,但是让数组为您保留是很常见的
  • 您应该
    保留
    数组本身,否则它将在事件循环结束时消失

  • 是否需要保留数组取决于方法完成后是否需要。是否需要保留数组取决于方法完成后是否需要。是否有更好的方法解决此问题?是否有更好的方法解决此问题?