-1

重複の可能性:
iPhone の画面サイズを取得しようとしたときの EXC_BAD_ACCESS

Objective-C には、いくつかの変数を多数のプリセットに自動的に設定する次のコード スニペットがあります。ただし、マークされた行で、「Program received signal: EXC_BAD_ACCESS」例外が発生します。

私を混乱させるのは、上の行が同じで、値が異なるだけだということです。1 行目で例外がスローされない場合、なぜ 2 行目で例外がスローされるのでしょうか? これについて何ができますか?

前もって感謝します!

ステレン

- (IBAction)presetPressed:(id)sender {
    if(self.userEnteringNumber) [self enterPressed];

    double xVal;
    double aVal;
    double bVal;
    NSString *preset = [sender currentTitle];
    if ([preset isEqualToString:@"1"]) {
        xVal = 1;
        aVal = 2;
        bVal = 3;
    } else if ([preset isEqualToString:@"2"]) {
        xVal = 1.5;
        aVal = 2.9;
        bVal = 3.0;
    } else if ([preset isEqualToString:@"3"]) {
        xVal = -1;
        aVal = -2;
        bVal = -3;
    }
    [self.variables setValue:[NSNumber numberWithDouble:xVal] forKey:@"x"];
    [self.variables setValue:[NSNumber numberWithDouble:aVal] forKey:@"a"];
    [self.variables setValue:[NSNumber numberWithDouble:bVal] forKey:@"b"];

    self.xVar.text = [NSString stringWithFormat:@"= %@", xVal];
    self.aVar.text = [NSString stringWithFormat:@"= %@", aVal]; //EXC_BAD_ACCESS here
    self.bVar.text = [NSString stringWithFormat:@"= %@", bVal];

    [self calculateResult];
}
4

2 に答える 2

1

フォーマット文字列@"= %@"を。に置き換えます@"= %g"

フォーマット文字列は、指定されたパラメータ値がオブジェクトインスタンス(%@)であると想定していましたが、オブジェクトインスタンスではなく、プリミティブ型のスカラーdouble値を指定しました。

于 2012-05-01T21:01:32.550 に答える
1

xVal、、aValbValすべてプリミティブdoubleですが、文字列形式は。を介してオブジェクトを検索しています%@

次のように置き換え%@てみてください%f(または%g科学的記数法が必要な場合):

    self.xVar.text = [NSString stringWithFormat:@"= %f", xVal];
    self.aVar.text = [NSString stringWithFormat:@"= %f", aVal];
    self.bVar.text = [NSString stringWithFormat:@"= %f", bVal];
于 2012-05-01T21:02:00.053 に答える