вне области - ошибка NSMutableArray - PullRequest
0 голосов
/ 10 ноября 2009
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 для объектов в таких массивах.

-Спасибо Алекс Е

EDIT

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 ]

3 голосов
/ 10 ноября 2009
  1. Вам не нужно звонить init по результатам вашего arrayWithCapacity: звонка. arrayWithCapacity: уже возвращает вам инициализированный (но автоматически освобожденный) объект. В качестве альтернативы вы можете позвонить [[NSMutableArray alloc] initWithCapacity:].
  2. Ваш цикл отключен на одну ошибку; Вы начинаете с нуля, поэтому вы добавите дополнительный объект. Добавление этого дополнительного объекта будет успешным - это просто не похоже на то, что вы пытаетесь сделать.
  3. Вы, вероятно, хотите autorelease объекты, которые вы добавляете в массив. Массив сохранит их самостоятельно. Если вам действительно нужно сохранить сами объекты, это нормально, но довольно часто, когда массив выполняет сохранение за вас.
  4. Вам следует retain сам массив, иначе он исчезнет в конце цикла событий.
2 голосов
/ 10 ноября 2009

Единственная ошибка, которую я могу заметить в вашем коде, это ваша NSArray инициализация.

Где вы делаете:

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

вы должны делать:

data = [NSMutableArray arrayWithCapacity:numISF];

Это потому, что arrayWithCapacity - это фабричный метод, который вернет вам автоматически выпущенный экземпляр. Если вы хотите продолжать использовать объект после этого метода, вам нужно retain его, и ваш файл может выглядеть следующим образом:

data = [[NSMutableArray arrayWithCapacity:numISF] retain];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...