0

私のアプリには、入力された値が正しいかどうかを確認するボタンがあります。クラッシュすることもありますが、奇妙なことに、不規則な間隔で発生します (3 回目の反復で発生する場合もあれば、10 回目の反復で発生する場合もあれば、まったく発生しない場合もあります)。

デバッガーで EXC_BAD_ACCESS エラーが発生します。そのため、何かがリリースされるべきではないときにリリースされているようです。ボタンは次の関数を呼び出します。

- (IBAction)checkValue:(id)sender{
int actualDifference = [firstNumberString intValue] - [secondNumberString intValue];
actualDifferenceAsString = [NSString stringWithFormat:@"%d", actualDifference];
if ([answerTextField.text isEqualToString:actualDifferenceAsString])
{
    UIAlertView *correctAlert = [[UIAlertView alloc] initWithTitle:@"matches"
            message:@"next value."
            delegate:nil
            cancelButtonTitle:@"ok" 
            otherButtonTitles: nil];
    [correctAlert show];
    [correctAlert release];
}
else
{
    UIAlertView *incorrectAlert = [[UIAlertView alloc]
    initWithTitle:@"does not match"
            message:@"next value."
        delegate:nil
            cancelButtonTitle:@"ok"
            otherButtonTitles: nil];
    [incorrectAlert show];
    [incorrectAlert release];
}

最初のステートメントを指すゾンビを使用します。

int actualDifference = [firstNumberString intValue] - [secondNumberString intValue];

誰が問題が何であるか知っていますか?

4

2 に答える 2

0

に変更します

 NSInteger actualDifference = [firstNumberString intValue] - [secondNumberString intValue];  //change int to NSInteger
NSString *actualDifferenceAsString = [NSString stringWithFormat:@"%d", actualDifference];
if ([answerTextField.text isEqualToString:actualDifferenceAsString])
{
    UIAlertView *correctAlert = [[UIAlertView alloc] initWithTitle:@"matches"
                                                           message:@"next value."
                                                          delegate:nil
                                                 cancelButtonTitle:@"ok" 
                                                 otherButtonTitles: nil];
    [correctAlert show];
    [correctAlert release];
}
else
{
    UIAlertView *incorrectAlert = [[UIAlertView alloc]
                                   initWithTitle:@"does not match"
                                   message:@"next value."
                                   delegate:nil
                                   cancelButtonTitle:@"ok"
                                   otherButtonTitles: nil];
    [incorrectAlert show];
    [incorrectAlert release];
}

このコードを取得します。それは私のために働いた...

于 2012-04-12T09:51:24.860 に答える
0

firstNumberString最初の行でゾンビが検出された場合は、プログラムの他の部分がorを解放していることを意味しますsecondNumberString。そこから問題が始まりますが、後でそれらの値にアクセスしようとしたときに、ここにしか現れません。他にどこでそれらの弦を扱っていますか? それらをリリースすることはありますか?

全体的な安全のために、メンバー変数ではなく、おそらくプロパティを割り当てる必要があります。

于 2012-04-12T12:22:49.563 に答える