-2

(XCode 4.3)为什么在带有 EXC_BAD_ACCESS 的 NSLog 语句中出现以下崩溃?

BOOL autoFlag
@property BOOL autoFlag
@synthesize autoFlag

[object setAutoFlag:YES]

NSLog(@"%@", [object autoFlag]);  //crashes here in debugger with EXC_BAD_ACCESS

我设法用NSLog(@"%d"...,来解决它1,但为什么不起作用@"%@"?我以为它只是将值转换为字符串?

4

2 回答 2

6

%@ 用于打印作为 NSObject 类的后代的对象的描述,但是可以将其覆盖以使您的对象打印您想要的任何内容。

除非 autoFlag 是一个对象,否则它将使您的程序崩溃。在 NSLog 语句中出现这些类型的错误是很常见的,因为编译器不能告诉你想要打印什么样的“东西”,而且大多数时候它不能事先知道(它会在哪里有一些例外告诉您您使用了错误的标识符)。

如果您想看到类似“True”或“YES”的内容,那么您需要类似的内容

NSLog(@"Auto Flag: %@",object.autoFlag? @"True":@"False");
于 2012-06-19T00:46:45.590 回答
2

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

%d之所以有效,是因为您告诉它将布尔值打印为整数,因此您将使用此方法返回0(false) 或(true)。1布尔值没有特定的格式化程序。

您遇到了崩溃,因为代码期望使用 指向内存地址的指针%@,而是给它一个原始数据类型,在本例中为布尔值。当应用程序尝试使用此地址并且那里没有对象时,您会得到一个EXEC_BAD_ACCESS.

于 2012-06-19T00:45:22.940 回答