线程1:由于调用另一种方法而发出SIGABRT信号

时间:2013-09-20 10:36:10

标签: ios objective-c sigabrt

很抱歉这个常见错误。

但我正在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];
    }

上面的代码工作正常,但是当我调用计算方法时,信号中止错误导致应用程序停止工作。

2 个答案:

答案 0 :(得分:2)

根据您共享的错误说明,您将方法calculation称为Class方法,但您的方法calculation是实例方法。 使用[self calculation];

答案 1 :(得分:0)

我认为问题是

[_ chk1 setTitle:@“1”forState:UIControlStateNormal];

本声明

一旦进行粗略检查,

_chk1就是按钮对象。

另外明智地将此语句用于像这样的按钮Action方法

更好地使用像“ - (IBAction)buttonTouched:(UIButton *)sender”这样的方法并保持每个对象的命名约定你声明所有对象对于exe都相同:方法名,按钮对象,bool值也不要写代码...........

  • (IBAction)chk1:(UIButton *)发件人{

    如果(CHK1)     {         number = number + 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];
    

    }