我是Objective-c新手的c ++程序员。
我使用单个视图创建了一个工作正常的计算器应用程序。我有一个Calculations类和一个ViewController。每次按下按钮时,ViewController中的IBAction方法都会调用Calculations类中定义的方法来处理输入并将输出作为NSString返回,然后我将其设置为label.text字段的值。
现在,我正在使用相同的Calculations类处理标签栏应用。这个应用程序有两个选项卡,每个选项卡都有一组独特的计算器输入按钮(两个视图共享相同的输入/输出数据)。第一个选项卡与我的第一个带有单个视图的应用程序相同,所以我试图以类似的方式执行此操作。
问题在于:
当按下某个按钮时,处理输入的IBAction方法会通过调用Calculations类方法(如下所示)运行而不会出现错误:
-(IBAction)readInput:(id)sender {
[_calculations input:[sender titleForState:UIControlStateNormal]];
inputField.text = [_calculations inputDisplay];
outputField.text = [_calculations outputDisplay];
}
但是,inputDisplay和outputDisplay方法都返回nil。使用调试器我注意到我无法“进入”对_calculations方法的调用,而是跳过该行,并且两者返回的值都是nil。我添加了以下方法:
-(IBAction)setNumber:(id)sender {
NSString *button =(NSString *)[sender titleForState:UIControlStateNormal];
inputField.text = button;
}
如果我将它附加到输入按钮,我可以看到显示更新。这似乎是调用_calculations成员函数和标签栏视图的问题(因为使用单个视图不存在此问题)。
我意识到我遗漏了很多信息,但我这样做是为了避免提供无关的信息。如果被问到,我会提供所有必要的细节。
答案 0 :(得分:1)
检查以确保_calculations
不是零。
您可以在nil
上发送任何消息(调用任何方法),它只会返回nil
,而不会导致异常。
答案 1 :(得分:0)
如果没有看到更多代码,诊断起来会有点困难。
如果我试图调试此问题,我首先要确保_calculations指向您希望它指向的对象。如果从NIB加载它可能没有初始化,仍然是零。您可以毫无问题地向nil对象发送消息。如果对象收到无法处理的消息(该方法不存在,或者目标对象为nil),则该调用的返回值为nil。
我过去曾把initilization代码放到init:方法中,花了几个小时为什么没有调用它,直到我意识到我需要将我的init代码放入viewDidLoad:或者initWithNibName:bundle:甚至是initWithCoder:selector。
HTH,马特