NSLog给出了运行时错误

时间:2012-01-27 11:23:56

标签: objective-c runtime-error nslog

好的,所以我知道我可以省略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
}

3 个答案:

答案 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的好书。