【问题标题】:Thread 1: Signal SIGABRT due to calling another method线程 1:由于调用另一个方法而发出 SIGABRT 信号
【发布时间】:2013-09-20 19:02:17
【问题描述】:

对于这个常见错误,我们深表歉意。

但我正在 X-Code 4.6 中创建一个转换器应用程序

我正在创建一个二进制到十进制转换器,我希望能够放置两个区域来进行计算。但由于某种原因,这给了我一个信号中止问题。

我已经尝试寻找一些答案,但我了解到这个错误的范围很大,所以有没有人可以帮助我,我只是 iOS 编程的初学者。

错误:

由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'+[BinaryToDecimal 计算]: 无法识别的选择器发送到类 0x7c98'

应用程序的界面包含 8 个按钮,以便用户可以将每个按钮切换为 1 或 0。

所以第一个调用的代码是;

- (IBAction)chk1:(id)sender {
    if(chk1)
    {
        number = number + 1;

        [_chk1 setTitle:@"1" forState:UIControlStateNormal];
        chk1 = false;
    } else {
        number = number - 1;
        [_chk1 setTitle:@"0" forState:UIControlStateNormal];
        chk1 = true;
    }
    [[self class]calculation];
}

计算是

- (void)calculation {
    switch (operatorVar) {
        case 1:
            answer = number + number2;
            _output.text = [NSString stringWithFormat:@"%f", answer];
            break;
        case 2:
            answer = number - number2;
            _output.text = [NSString stringWithFormat:@"%f", answer];
            break;
        case 3:
            answer = number * number2;
            _output.text = [NSString stringWithFormat:@"%f", answer];
            break;
        case 4:
            answer = number / number2;
            _output.text = [NSString stringWithFormat:@"%f", answer];
            break;
        default:
            answer = number + number2;
            _output.text = [NSString stringWithFormat:@"%f", answer];
            break;
    }
}

在我这样做之前,我的代码是

- (IBAction)chk1:(id)sender {
        if(chk1)
        {
            number = number + 1;

            [_chk1 setTitle:@"1" forState:UIControlStateNormal];
            chk1 = false;
        } else {
            number = number - 1;
            [_chk1 setTitle:@"0" forState:UIControlStateNormal];
            chk1 = true;
        }
        _output.text = [NSString stringWithFormat:@"%f", number];
    }

上面的代码运行良好,但是当我调用计算方法时,信号中止错误使应用程序无法运行。

【问题讨论】:

  • 你如何以及在哪里调用这个方法?
  • @SuryakantSharma [[self class]calculation]; 是我用来从每个检查操作中调用计算方法的方法
  • 根据您共享的代码行,您正在调用 Class 方法,但您的计算方法是实例方法。使用[自算];
  • @SuryakantSharma 是的,它成功了!谢谢:)
  • 那很好!!!接受我的回答。

标签: ios objective-c sigabrt


【解决方案1】:

根据您共享的错误描述,您将方法 calculation 作为类方法调用,但您的方法 calculation 是实例方法。 使用[self calculation];

【讨论】:

    【解决方案2】:

    我认为问题是

    [_chk1 setTitle:@"1" forState:UIControlStateNormal];

    此声明

    _chk1 是一次粗略检查的按钮对象。

    否则,请将此语句用于像这样的按钮操作方法

    最好使用“-(IBAction)buttonTouched:(UIButton *)sender”之类的方法,并保持每个对象的命名约定,为 exe 声明所有对象相同:方法名称、按钮对象、布尔值也不要写这样的代码............

    • (IBAction)chk1:(UIButton*)sender {

      如果(chk1) { 数字 = 数字 + 1;

          [sender setTitle:@"1" forState:UIControlStateNormal];
          chk1 = false;
      } else {
          number = number - 1;
          [sender setTitle:@"0" forState:UIControlStateNormal];
          chk1 = true;
      }
      _output.text = [NSString stringWithFormat:@"%f", number];
      

      }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      相关资源
      最近更新 更多