2012-01-27 7 views
0

私はNSLogを削除することができますが、なぜ「EXC_BAD_ACCESS」エラーが出るのですか?NSLogはランタイムエラーを返します

- (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

もう一度メソッドシグネチャを参照してください

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex2 

buttonIndex2はNSIntegerです。 NSLogで%@を実行した場合、コードはオブジェクトに対してdescriptionメソッドを呼び出しています。しかし、buttonIndex2はオブジェクトではありません。

使用NSLog(@"%d",buttonIndex2);

最初の1あなたは基本的に[nil description]と同じであり、これは完全に合法であるメモリアドレス0、でオブジェクトのdescriptionを呼び出しているので、アプリをクラッシュしない(buttonIndex == 0で) Objective-Cでは。

+0

ありがとうございます!私はそれを見落とした。 –

+0

または '%i'(私の個人的な好みの原因は小数点ではないintだと思います)。 – vakio

2

使用%dそれが整数であるとして、%@が文字列のためです...

NSLog(@"%d", buttonIndex); 
2

buttonIndex2が整数を使用することである:

NSLog(@"%d",buttonIndex2); 

そしてCにいくつかの良い本を読んで行きます

関連する問題