NSLog не работает - PullRequest
       20

NSLog не работает

1 голос
/ 09 ноября 2010

Странная вещь, которую я когда-либо видел ... NSLog не работает в методе, основанном на чем-то странном.Вот код:

-(void) testBoard {
BoardManager* bm = [BoardManager manager];
 Board* board = [bm boardForName:@"fourteen by eight"];
 NSLog(@"%@", board);
 NSLog(@"%@", board.coords);
    }

в Board.m:

-(NSArray*) coords {
  if(!_coords.count && _definition) {
    NSArray* c = [Board decode:_definition];
    [self setCoords:c];
  }
  return _coords;
} 

    +(NSArray*) decode:(NSString*)encodedCoords {
 NSMutableArray* coords = [NSMutableArray array];
 NSArray* tokens = [encodedCoords componentsSeparatedByString:@","];
 int i = 0;
 NSString* dimStr = [tokens objectAtIndex:i++];
 int width = [dimStr substringToIndex:2].intValue;
 int height = [dimStr substringWithRange:NSMakeRange(2, 2)].intValue;
 int depth = [dimStr substringFromIndex:4].intValue;
 NSLog(@"w=%d h=%d d=%d", width, height, depth);

 NSString* b128;
 NSString* b2;

 for(int z=0; z<depth; z++) {
  for(int y=0; y<height; y++) {
   b128 = [tokens objectAtIndex:i++];
   NSLog(@"[%@]", b128);

   b2 = [Board base128to2:b128];
   NSLog(@"b2=%@",b2);

   for(int x=0; x<b2.length; x++) {
    if([b2 characterAtIndex:b2.length-1-x] == '1') {
     Coord* coord = [Coord x:width-1-x y:height-1-y z:z];
     [coords addObject:coord];
    }
   }
  }
 }
 return coords;
    }

Что происходит, ни один из операторов NSLog внутри decode: или методов, вызываемых из decode: не будет регистрироватьсяконсоль.Тем не менее, NSLog до и после вызова decode: work, а остальная часть кода вокруг NSLog выполняется нормально.Я обнаружил, что могу заставить все операторы NSLog работать, просто закомментировав [corres addObject :ordin] ;.Это утверждение появляется после утверждений NSLog, на которые оно влияет.Я также обнаружил, что могу заставить NSLog работать, переставив несколько строк в testBoard: вот так:

   -(void) testBoard
    {
 BoardManager* bm = [BoardManager manager];
 Board* board = [bm boardForName:@"fourteen by eight"];
 NSLog(@"%@", board);

 NSString* def = board.definition;
 NSArray* coords = [Board decode:def];

 NSLog(@"%@", coords);
    }

Это выглядит довольно странно ... xcode Лох-Несское чудовище появляется?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2010

По моему опыту, расширение макросов NSLog может завершиться неудачей. В большинстве случаев очевидно, почему, иногда нет. Просто сделайте что-то вроде этого:

id objToLog = /* whatever */;
NSLog(@"%@", objToLog);

Если этот подход работает, вы можете продолжить разработку и, возможно, позже разобраться в проблеме.

0 голосов
/ 09 ноября 2010

Вы пробовали запустить в отладчике?Что произойдет, когда вы доберетесь до этого оператора if

 if(!_coords.count && _definition)

Вы уверены, что _coords.count равен 0 и _definition не равен nil

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...