从viewcontroller调用的类方法(NSString类型)返回nil?

时间:2011-01-15 04:16:54

标签: iphone objective-c uitabbarcontroller

我是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成员函数和标签栏视图的问题(因为使用单个视图不存在此问题)。

我意识到我遗漏了很多信息,但我这样做是为了避免提供无关的信息。如果被问到,我会提供所有必要的细节。

2 个答案:

答案 0 :(得分:1)

检查以确保_calculations不是零。

您可以在nil上发送任何消息(调用任何方法),它只会返回nil,而不会导致异常。

答案 1 :(得分:0)

如果没有看到更多代码,诊断起来会有点困难。

如果我试图调试此问题,我首先要确保_calculations指向您希望它指向的对象。如果从NIB加载它可能没有初始化,仍然是零。您可以毫无问题地向nil对象发送消息。如果对象收到无法处理的消息(该方法不存在,或者目标对象为nil),则该调用的返回值为nil。

我过去曾把initilization代码放到init:方法中,花了几个小时为什么没有调用它,直到我意识到我需要将我的init代码放入viewDidLoad:或者initWithNibName:bundle:甚至是initWithCoder:selector。

HTH,马特