2009-11-10 6 views
0
data = [[NSMutableArray arrayWithCapacity:numISF]init]; 
count = 0; 
while (count <= numISF) 
{ 
    [data addObject:[[rouge_col_data alloc]init]]; 
    count++; 
} 

Когда я шаг через время цикла, каждый объект в массиве данных является «выходит за рамки»из области видимости - NSMutableArray ошибки

румяна Col данных «ы реализации выглядит следующим образом ..

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

Большинство учебных пособий Я мог найти только NSStrings для объектов в этих типах массивов.

-Спасибо 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++; 

} 

все та же ошибка, даже при переключении 'данные ='.

+0

Есть ли лучший способ исправить это? – DevEarley

ответ

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

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

Где вы:

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

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

data = [NSMutableArray arrayWithCapacity:numISF]; 

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

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

Если вам нужно сохранить массив, зависит от того, нужно ли вам это после завершения метода. – Chuck

+0

Да, я обязательно обновлю ответ на всякий случай. – pgb

Смежные вопросы