【问题标题】:NSMutable array invalid after objectAtIndex在 objectAtIndex 之后 NSMutablearray 无效
【发布时间】:2009-11-16 15:46:17
【问题描述】:
@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];
    }
  }

}

这是我在调试器中看到的

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

【问题讨论】:

  • 我认为您误解了从调试器获得的结果。做一些 NSLog 调试以确保。例如在您的评论下方添加以下行:NSLog(@"我们的列表中还有什么东西吗 - 让我们看看对象计数 %d", [房间计数]);
  • 对此,请尝试NSLog(@"First object: %@", [rooms objectAtIndex:0]);

标签: iphone cocoa cocos2d-iphone nsmutablearray


【解决方案1】:

调试窗口有时会这样做。如果不是,则“超出范围”。

您对此无能为力,这是 XCode 中的一个错误。仅仅因为调试器不能在窗口中显示值,并不意味着对象已经消失。

在此阅读stackoverflow.com question about debugging。它有一些非常好的调试信息。好东西要知道!

【讨论】:

    【解决方案2】:

    您显示的调试片段并不表示房间无效,只是它没有显示您期望的值 - 如果您在循环后在调试器中停止并在调试器控制台中输入:

    po rooms
    

    它显示什么?

    你的代码看起来不错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      相关资源
      最近更新 更多