iPhone nslog“EXC_BAD_ACCESS”

时间:2011-02-27 10:52:04

标签: iphone

我试图使用NSLog来打印控制台消息。问题是有时我在调用它时会收到“EXC_BAD_ACCESS”错误

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

这里我只想看看传递给函数的参数包含了什么。第一个NSLog工作正常。第二个导致“EXC_BAD_ACCESS”,我不明白为什么?。

5 个答案:

答案 0 :(得分:13)

%@仅适用于对象。而toInterfaceOrientation不是一个对象。

正如您在UIInterfaceOrientation的文档中看到的,它只是enum

答案 1 :(得分:6)

第二次NSLog崩溃,因为您尝试将整数打印为NSObject(%@而不是%d)。 UIInterfaceOrientation是一个不起作用的枚举。

答案 2 :(得分:2)

EXC_BAD_ACCESS通常意味着您正在尝试调用已从内存中释放的对象。尝试在环境变量中启用NSZombies以查看它导致问题的位置

在这里回答类似的问题: How to use NSzombie in xcode?

答案 3 :(得分:2)

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

%@仅用于对象。

UIInterfaceOrientation是一个枚举: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html#//apple_ref/doc/c_ref/UIDeviceOrientationPortrait

当你使用%@时,它基本上是在调用:

[UIInterfaceOrientation descriptionWithLocale]

显然这会导致EXC_BAD_ACCESS

答案 4 :(得分:1)

toInterfaceOrientation是一个枚举变量...所以如果要打印它的日志,你必须使用%d ......。和%@主要用于对象......

使用此代码

  

NSLog(@“EXC_BAD_ACCESS:%d”,toInterfaceOrientation);