私が今まで見た中で最も奇妙なこと.. 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;
}
これで、decode: 内の NSLog ステートメントや、decode: から呼び出されたメソッドがコンソールにログを記録しなくなります。ただし、decode: を呼び出す前後の NSLog は機能し、NSLog の周りの残りのコードは正常に実行されます。[coords addObject:coord]; をコメントアウトするだけで、すべての NSLog ステートメントを機能させることができることがわかりました。このステートメントは、影響を受ける NSLog ステートメントの後に表示されます。また、testBoard のいくつかの行を次のように再配置することで、NSLog を機能させることができることもわかりました。
-(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 ネス湖の怪物が浮上していますか?!