可能性の重複 "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];
}
が、これは私の問題を解決し、ありがとうございます。質問の一部は、なぜこれが最初のステートメントでは機能するのか、2番目のステートメントでは機能しないのかに関係しています。また、3つのステートメントはすべてプリセット== "1"のときに機能します。 %@がプリミティブではなくオブジェクトのみで動作すると仮定した場合、なぜ動作するのはなぜですか? – Steztric
ありがとうございました!あなたの助けが大変ありがとうございます。あなたのソリューションT ReddyとTillの両方が優れています。しかし、%@はオブジェクトの情報を持っているので、私は以下の解決策を決めました。 self.xVar.text = [NSString stringWithFormat:@ "=%@"、[NSNumber numberWithDouble:xVal]]; これは、xVarのテキストが不必要な末尾のゼロを使わずにうまくフォーマットされることを保証します。 – Steztric