2011-02-27 13 views
7

Im tratando de utilizar el NSLog, para imprimir los mensajes de la consola. El problema es que a veces recibo un error "EXC_BAD_ACCESS" al llamarlonslog de iPhone "EXC_BAD_ACCESS"

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
NSLog(@"Working test %d", toInterfaceOrientation); 
NSLog(@"EXC_BAD_ACCESS %@", toInterfaceOrientation); 
} 

Aquí simplemente quiero ver lo que los argumentos pasados ​​a la función contienen. El primer NSLog funciona bien. El segundo causa un "EXC_BAD_ACCESS" y no entiendo por qué ?.

Respuesta

13

%@ solo funciona con objetos. Y toInterfaceOrientation no es un objeto.

Como puede ver en la documentación para UIInterfaceOrientation es solo enum.

2

EXC_BAD_ACCESS generalmente significa que está intentando llamar a un objeto que se ha liberado de la memoria. Intente encender NSZombies en las variables de entorno para ver dónde está causando el problema

respuesta en una pregunta similar aquí: How to use NSzombie in xcode?

6

El segundo accidente NSLog porque intenta imprimir un entero como un NSObject (% @ en vez de% d). UIInterfaceOrientation es una enumeración que no funciona.

2

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

% @ es sólo para los objetos.

UIInterfaceOrientation es una enumeración: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html#//apple_ref/doc/c_ref/UIDeviceOrientationPortrait

Cuando se utiliza% @ Se trata básicamente de llamada:

[UIInterfaceOrientation descriptionWithLocale] 

Obviamente, esto causará una EXC_BAD_ACCESS

1

toInterfaceOrientation es una variable de enumeración ... por lo tanto, si desea imprimir el registro, debe usar% d ....... y% @ utiliza sobre todo para objetos ...

utilizar este código:

NSLog (@ "EXC_BAD_ACCESS:% d", toInterfaceOrientation);