超出范围 - NSMutableArray错误

时间:2009-11-10 17:25:40

标签: objective-c object nsmutablearray

data = [[NSMutableArray arrayWithCapacity:numISF]init];
count = 0;
while (count <= numISF)
{   
    [data addObject:[[rouge_col_data alloc]init]];
    count++;
}

当我逐步执行while循环时,数据数组中的每个对象都是“超出范围”

rouge col数据的实现看起来像这样..

@implementation rouge_col_data
@synthesize pos;
@synthesize state;
-(id) init {
    self = [super init];    
    return self;
}
@end

我能找到的大多数教程只对这些类型的数组中的对象使用NSStrings。

-Thanks Alex E

修改

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 ='。

2 个答案:

答案 0 :(得分:3)

  1. 您无需就init电话的结果致电arrayWithCapacity:arrayWithCapacity:已经返回一个初始化(但自动释放)的对象。或者,您可以拨打[[NSMutableArray alloc] initWithCapacity:]
  2. 你的循环有一个错误;你从零开始,所以你将添加一个额外的对象。添加这个额外的对象会成功 - 它似乎不像你想要做的那样。
  3. 您可能希望autorelease您要添加到阵列的对象。该阵列将保留它们自己。如果你确实需要保留对象本身,那很好,但让阵列为你做保留是很常见的。
  4. 你应该retain数组本身,否则它会在事件循环结束时消失。

答案 1 :(得分:2)

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

你在哪里:

data = [[NSMutableArray arrayWithCapacity:numISF] init];
你应该这样做:

data = [NSMutableArray arrayWithCapacity:numISF];

这是因为arrayWithCapacity是一个工厂方法,它会返回一个自动释放的实例。如果你想在这个方法之后继续使用这个对象,你需要retain它,你的看起来会像:

data = [[NSMutableArray arrayWithCapacity:numISF] retain];