Недопустимый массив NSMutable после objectAtIndex - PullRequest
0 голосов
/ 16 ноября 2009
@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];
    }
  }

}

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

альтернативный текст http://img163.imageshack.us/img163/8090/20091117174111.png

Ответы [ 2 ]

0 голосов
/ 18 ноября 2009

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

Мало что вы можете с этим поделать, это небольшая ошибка в XCode. Тот факт, что отладчик не может показать вам значение в окне, не означает, что объект исчез.

Прочтите здесь вопрос stackoverflow.com об отладке . У этого есть очень хорошая отладочная информация. Полезно знать!

0 голосов
/ 16 ноября 2009

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

po rooms

Что это показывает?

Код у вас выглядит отлично.

...