2010-11-09 23 views
1

Chose la plus étrange que j'ai jamais vue .. NSLog échoue dans une méthode basée sur quelque chose de bizarre. Voici le code:NSLog ne fonctionne pas

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

dans 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; 
    } 

Maintenant ce qui se passe est, aucune des déclarations NSLog dans Décodage: ou méthodes appelées à partir Décodage: enregistrerons à la console. Cependant, NSLog avant et après l'appel de decode: work, et le reste du code autour de la NSLog s'exécute bien. J'ai trouvé que je pouvais faire fonctionner toutes les instructions NSLog simplement en commentant [coords addObject: coord] ;. Cette instruction apparaît après les instructions NSLog qu'elle affecte. J'ai aussi trouvé que je pouvais faire travailler de la NSLog en réorganisant quelques lignes dans testboard: comme celui-ci:

-(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); 
    } 

Cela semble tout à fait bizarre..an Xcode Loch Ness surfaçage monstre ?!

Répondre

0

Avez-vous essayé d'exécuter dans le débogueur? Qu'est-ce qui se passe quand vous obtenez que si la déclaration

if(!_coords.count && _definition) 

Etes-vous sûr _coords.count est 0 et _definition est non nul

0

Dans mon expérience, NSLog expansions macro peut échouer. La plupart du temps, c'est évident pourquoi, parfois non. Il suffit de faire quelque chose comme ceci:

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

Si cette approche fonctionne, vous pouvez aller de l'avant avec votre développement et peut-être vous comprendre le problème plus tard.