如何在函数范围内声明一个对象?

时间:2013-06-26 00:33:30

标签: objective-c exc-bad-access

我在斯坦福CS193p的任务2(在iTunes U上),我对EXC_BAD_ACCESS错误感到困惑。

在第一个作业中,我们使用了这样的东西:

- (IBAction)operationPressed:(UIButton *)sender {
    //...
    NSString *resultString = [NSString stringWithFormat:@"%g", result];
    self.display.text = resultString;
}

这很好用。现在,我正在尝试与NSSet类似的东西:

+ (double)runProgram:(id)program{
    NSMutableArray *stack;
    NSSet *listOfFunctions = [NSSet setWithObjects:@"cos", @"sin", @"sqrt", "π", @"tan", @"neg", @"^", @"rad", @"+", @"-", @"/", @"*", nil];
    //...
}

运行该函数时,*listOfFunctions行上的EXC_BAD_ACCESS崩溃。我的问题是:为什么第一个示例工作并从+ stringWithFormat:函数生成NSString,而第二个示例不生成NSSet?我需要对[[NSSet alloc] init]做些什么吗?我也试过NSSet的+ initWithObjects:,没有运气。

2 个答案:

答案 0 :(得分:3)

集合中的一个字符串是C字符串,而不是NSString

换句话说,您忘记了@字符串之前的"π"

答案 1 :(得分:0)

"π"

您忘记了此字符串前面的@符号,这使其成为C字符串而不是NSString。请改用@"π"