【问题标题】:Class method (NSString type) called from viewcontroller returns nil?从 viewcontroller 调用的类方法(NSString 类型)返回 nil?
【发布时间】:2011-01-15 04:16:54
【问题描述】:

我是一名刚接触 Objective-c 的 C++ 程序员。

我创建了一个计算器应用程序,它使用单个视图运行良好。我有一个计算类和一个 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 成员函数和选项卡栏视图的问题(因为使用单个视图不存在此问题)。

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

【问题讨论】:

  • 请注意,您可以 format lines as code 将它们缩进四个空格。编辑器工具栏中的“{}”按钮会为您执行此操作。编辑您的问题并尝试一下。单击编辑器工具栏中的橙色问号以获取有关格式设置的更多信息和提示。
  • 示例代码确实是incomplete_calculations 是怎么设置的?是零吗? inputDisplayoutputDisplay 方法是什么?如果它们是Calculation 的属性,它们是如何设置的? IB中的绑定是什么?

标签: iphone objective-c uitabbarcontroller


【解决方案1】:

检查以确保_calculations 不为零。

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

【讨论】:

    【解决方案2】:

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

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

    我过去曾将初始化代码放入 init: 方法中,并且花了几个小时为什么它没有被调用,直到我意识到我需要将我的初始化代码放入 viewDidLoad: 或initWithNibName:bundle: 甚至是 initWithCoder: 选择器。

    HTH,马特

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 2016-08-27
      • 2021-04-05
      • 1970-01-01
      相关资源
      最近更新 更多