2011-02-27 3 views
7

J'essaie d'utiliser NSLog pour imprimer les messages de la console. Le problème est parfois je reçois une erreur « EXC_BAD_ACCESS » lors de l'appeliPhone nslog "EXC_BAD_ACCESS"

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

Ici, je veux simplement voir ce que les arguments passés dans la fonction contiennent. Le premier NSLog fonctionne bien. Le second provoque un "EXC_BAD_ACCESS" et je ne comprends pas pourquoi.

Répondre

13

%@ fonctionne uniquement avec des objets. Et toInterfaceOrientation n'est pas un objet. Comme vous pouvez le voir dans la documentation pour UIInterfaceOrientation, il s'agit juste d'un enum.

2

EXC_BAD_ACCESS signifie généralement que vous essayez d'appeler un objet qui a été libéré de la mémoire. Essayez d'activer NSZombies dans vos variables d'environnement pour voir où il est l'origine du problème

réponse à une question similaire ici: How to use NSzombie in xcode?

6

Le deuxième accident NSLog parce que vous essayez d'imprimer un entier comme NSObject (% @ au lieu de% d). UIInterfaceOrientation est une énumération qui ne fonctionne pas.

2

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

% @ est pour les objets seulement.

UIInterfaceOrientation est un ENUM: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html#//apple_ref/doc/c_ref/UIDeviceOrientationPortrait

Lorsque vous utilisez% @ il appelle essentiellement:

[UIInterfaceOrientation descriptionWithLocale] 

Il est évident que cela entraînera une EXC_BAD_ACCESS

1

toInterfaceOrientation est une variable enum ... donc si vous voulez imprimer le journal, vous devez utiliser% d ....... et% @ la plupart du temps utilisé pour les objets ...

Utilisez ce code:

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