好的,所以我知道我可以省略NSLog,但为什么会给我一个“EXC_BAD_ACCESS”错误?
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex2
{
if(buttonIndex2 == 0 && waitForAction == NO)
{
waitForAction = YES;
[self showAbortAlert];
NSLog(@"%@",buttonIndex2); //This one does not crash the app
} else if (buttonIndex2 == 1 && waitForAction == NO)
{
waitForAction = YES;
[self addObject];
NSLog(@"%@",buttonIndex2); //This one crashes the app
} //else if
}
答案 0 :(得分:3)
再次查看方法签名
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex2
buttonIndex2的类型为NSInteger
。如果在NSLog中执行%@
,则代码将在对象上调用description
方法。但是buttonIndex2不是一个对象。
使用NSLog(@"%d",buttonIndex2);
第一个(使用buttonIndex == 0)不会使应用程序崩溃,因为您在内存地址0的对象上调用description
,这与[nil description]
基本相同,这是完美的在Objective-C中合法。
答案 1 :(得分:2)
使用%d
,因为它是一个整数,%@
用于字符串......
NSLog(@"%d", buttonIndex);
答案 2 :(得分:2)
buttonIndex2是一个整数使用:
NSLog(@"%d",buttonIndex2);
去读一本关于C的好书。