2012-05-01 3 views
-1

可能性の重複 "EXC_BAD_ACCESS" 信号を受信:
EXC_BAD_ACCESS when trying to get iPhone screen dimensionsのObjective-C:

私は自動的にプリセットの数にいくつかの変数を設定し、Objective-Cの中に、次のコードスニペットを持っています。しかし、マークされた行に私は "プログラム受信信号: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]; 
} 
+0

が、これは私の問題を解決し、ありがとうございます。質問の一部は、なぜこれが最初のステートメントでは機能するのか、2番目のステートメントでは機能しないのかに関係しています。また、3つのステートメントはすべてプリセット== "1"のときに機能します。 %@がプリミティブではなくオブジェクトのみで動作すると仮定した場合、なぜ動作するのはなぜですか? – Steztric

+0

ありがとうございました!あなたの助けが大変ありがとうございます。あなたのソリューションT ReddyとTillの両方が優れています。しかし、%@はオブジェクトの情報を持っているので、私は以下の解決策を決めました。 self.xVar.text = [NSString stringWithFormat:@ "=%@"、[NSNumber numberWithDouble:xVal]]; これは、xVarのテキストが不必要な末尾のゼロを使わずにうまくフォーマットされることを保証します。 – Steztric

答えて

1

xValaValbValはすべてプリミティブダブルですが、文字列フォーマットは%@でオブジェクトを探しています。

(あなたが科学的表記法を好む場合や%g%f%@を交換してください:

self.xVar.text = [NSString stringWithFormat:@"= %f", xVal]; 
    self.aVar.text = [NSString stringWithFormat:@"= %f", aVal]; 
    self.bVar.text = [NSString stringWithFormat:@"= %f", bVal]; 
+0

ありがとうT_Reddy。あなたは偏見なく答えました。私はあなたの残りの人たちのために私が客観的に新しいことを謝り、時には正しい質問をしません。 – Steztric

1

@"= %g"@"= %@"あなたの書式文字列を交換してください。

指定されたパラメータ値がオブジェクトインスタンス(%@)であると仮定していましたが、オブジェクトインスタンスではなくプリミティブ型のスカラー倍精度値を指定しました。

関連する問題