-1

可能重复:
尝试获取 iPhone 屏幕尺寸时的 EXC_BAD_ACCESS

我在 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];
}
4

2 回答 2

1

将您的格式字符串替换@"= %@"@"= %g".

您的格式化字符串假设给定的参数值将是一个对象实例 ( %@),但您提供了一个标量双精度值,它不是对象实例而是原始类型。

于 2012-05-01T21:01:32.550 回答
1

xVal, aVal,bVal都是原始双精度数,但是您的字符串格式正在通过%@.

尝试替换%@%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 回答