2012-05-01 54 views
-1

可能重复:
EXC_BAD_ACCESS when trying to get iPhone screen dimensions目的-C:接收 “EXC_BAD_ACCESS” 信号

我在目标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

谢谢,这解决了我的问题。部分问题与为什么这适用于第一种说法但不适用于第二种说法有关。另外,当预置==“1”时,所有3种语句都可以正常工作。如果%@只能用于对象而不是基元,为什么它有时会起作用,有时却不起作用? – Steztric

+0

谢谢受访者!非常感谢您的帮助。您的解决方案T Reddy和Till都非常出色。但是,在用%@作为对象的信息的情况下,我决定采用以下解决方案; self.xVar.text = [NSString stringWithFormat:@“=%@”,[NSNumber numberWithDouble:xVal]]; 这确保了xVar中的文本格式很好,没有不必要的尾随零。 – Steztric

回答

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]; 
+0

谢谢T_Reddy。你没有偏见地回答。我很抱歉,我是你们其他人的新手,而且我有时候不会问正确的问题。 – Steztric

1

@"= %g"更换您的格式字符串@"= %@"

您的格式化字符串假定给定的参数值将是一个对象实例(%@),但您提供的标量double值不是对象实例,而是基本类型。

相关问题