2012-04-07 42 views
0

小背景: 我在教自己如何编程iOS。所以我是一个初学者。 我只是不能把我的头围绕这个问题。编写使用NSDictionary将变量转换为数字的方法遇到问题

我有一个方法,基本上应该采取一个按钮上的变量,将该变量传递给我的变量转换方法。

变量转换方法只是应该通过预定义的NSDictionary并基本上搜索变量并返回相关的值。

然后用该相关变量更新显示。

即,如果x的值是2,那么当我按下x时,屏幕应该只会说出2. 我只是试图教自己NSDictionary和所有的,所以任何帮助将是伟大的。

- (IBAction)variablePressed:(id)sender { 
    NSDictionary *values = [NSDictionary dictionaryWithObjectsAndKeys: 
          [NSNumber numberWithInt:2], @"x", 
          [NSNumber numberWithInt:4], @"y", 
          [NSNumber numberWithInt:6], @"z", nil]; 
    double newValue = [self.brain convertVariable:[sender currentTitle] usingVariableValues:values]; 

    // NSLog([NSString stringWithFormat:@"%d", newValue]); 
} 

该代码崩溃与NSLog一行。我评论说,因为我无法得到它的工作。

+0

是的,请缩小到一个特定的问题。没有人会考虑你的整个项目,并猜测你遇到了什么问题。 – 2012-04-07 07:12:11

+0

当然, 只有一种方法需要帮助。位于CalculatorViewController.m中的方法 该方法的名称是 - (IBAction)variablePressed(第62行)。 该程序似乎崩溃在已被注释掉的第69行。我试图使用NSLog来查看变量newValue是否被分配了一个值,但是我可以用NSLog – khaliq 2012-04-07 07:32:36

+1

尝试%f而不是%d来打印该变量。 d代表数字不加倍。错误是EXC_BAD_ACCESS正确吗? – borrrden 2012-04-07 08:30:19

回答

2

尝试改变的NSLog语句下面...

NSLog(@"newValue is %f", newValue); 

NSLog的执行参数替换,所以没有必要stringWithFormat。

0

你没有在你的stringWithFormat中为你的变量使用正确的替代。它试图把它看作一个数字。这会导致从该内存位置读取不正确的字节数(或者我假设),并导致崩溃(这部分不是假设xD)。 %d看起来应该是“double”,但它实际上意味着“数字”(int,short等)。将其更改为%f(= float),它会很好。

编辑正如在其他答案中指出的,NSLog的工作方式与stringWithFormat(它直接使用格式字符串和参数)相同。你不需要将stringWithFormat传递给它。事实上,这样做会导致编译器警告有关可能不安全的字符串。

+0

谢谢你的帮助! 假设我想使用 设置显示self.display.text = [NSString stringWithFormat:@“%g”,newValue]; 是否有另一种方法可以做到这一点?还是我以正确的方式做这件事? 其次,%g好吗?我注意到%f落后于零。 – khaliq 2012-04-07 20:09:45

+0

%g也很好,下面是Apple的参考指南:http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/ UID/TP40004265 – borrrden 2012-04-08 02:03:39

相关问题