2009-11-16 2 views
0
@implementation Level 
@synthesize doors, rooms; 
- (id) init 
{ 
    self = [super init]; 
    if (self != nil) { 
     rooms = [[NSMutableArray alloc] init]; 
     doors = [[NSMutableArray alloc] init]; 
    } 
    return self; 
} 


- (void)generate{ 
    int room_count = 2; 
    Room *room; 
    for (int i=0; i<room_count; i++) { 
    room = [[Room alloc] init]; 
    [room generate_Doors]; 
    [self.rooms addObject:room]; 
    [room release]; 
    } 
    for (int i=0; i<[rooms count]; i++) { 
    Room *r=[rooms objectAtIndex:i]; 
    //After this point rooms is invalid 
    int l=[[r doors] count]; 
    for (int j=0; j<l; j++) { 
     Door *d=[[[rooms objectAtIndex:i] doors] objectAtIndex:j]; 
     [self.doors addObject:d]; 
    } 
    } 

}NSMutable массив недействительным после objectAtIndex

Это то, что я видел в отладчике

alt text http://img163.imageshack.us/img163/8090/20091117174111.png

+0

Я думаю, что вы неверно истолковываете результаты, получаемые от отладчика. Проведите некоторую отладку NSLog, чтобы убедиться. например добавьте следующую строку под своим комментарием: NSLog (@ "у нас все еще есть что-то в нашем списке - позволяет увидеть количество объектов% d", [количество комнат]); – Till

+0

В этом случае попробуйте 'NSLog (@" Первый объект:% @ ", [rooms objectAtIndex: 0]);'. –

ответ

0

Отладочное окно делает это иногда. «Вне области», когда это не так.

Не так много вы можете сделать, это немного ошибка в XCode. Просто потому, что отладчик не может показать вам значение в окне, не означает, что объект ушел.

Прочитайте здесь об этом stackoverflow.com question about debugging. У него есть очень хорошая отладочная информация. Хороший материал, чтобы знать!

0

фрагмент отладки вы показываете не указывает номера недействительна, так что не отображая ожидаемые значения - если вы остановитесь в отладчике после цикла и введите консоль отладчика:

po rooms 

Что отображается?

Код, который у вас хорошо выглядит.

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