2013-08-02 3 views
0

Я не могу понять, почему я продолжаю получать эту ошибку. Всякий раз, когда я нажимаю кнопку в своем приложении, все происходит сбой. Вот код:Я получаю эту «Thread 1: signal SIGABRT»

#import "additionViewController.h" 

@interface additionViewController(){ 
} 

@end 

@implementation additionViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (IBAction)getValue: (id)sender { 
    self.numberOne = (NSNumber *)self.firstNum.text; 
    self.numberTwo = (NSNumber *)self.secondNum.text; 
    self.fnumberOne = [self.numberOne floatValue]; 
    self.fnumberTwo = [self.numberTwo floatValue]; 

    self.finalValue = [NSNumber numberWithFloat:(self.fnumberOne + self.fnumberTwo)]; 

    self.sum.text = (NSString *)self.finalValue; 


} 
@end 

Это первое приложение для iOS, которое я пытаюсь создать самостоятельно. Это довольно просто. Не происходит в App Store или что-то еще.

+1

Сообщений об ошибке, пожалуйста. – akashivskyy

ответ

1

Предполагая, что firstNum и secondNum являются UITextFields - text Свойства этих объектов будут NSStrings. Вы не можете преобразовать их в числа, выполнив приведение к NSNumber. Это просто изменит тип указателя, но ничего не сделает, чтобы фактически преобразовать представление данных из текста в число.

Самое простое решение:

self.fnumberOne = self.firstNum.floatValue; 
self.fnumberTwo = self.secondNum.floatValue; 

В floatValue свойства фактически преобразовать текст в float. Тогда, возможно, вам даже не нужны свойства self.numberOne и self.numberTwo? Если вы все еще делаете, вы можете сделать это (и аналогично с self.finalNumber, если вам нужно, что тоже):

self.fnumberOne = self.firstNum.floatValue; 
self.fnumberTwo = self.secondNum.floatValue; 
self.numberOne = @(self.fnumberOne); 
self.numberTwo = @(self.fnumberTwo); 

Синтаксис @() это удобный способ обернуть примитив в соответствующий тип объекта, в данном случае a NSNumber.

Кроме того, у вас будет проблема simlar с self.sum.text = (NSString *)self.finalValue - вы не можете использовать оператор C casting, вам нужно фактически преобразовать значение обратно в строку. Простое решение:

self.sum.text = [NSString stringWithFormat:@"%f", self.fnumberOne + self.fnumberTwo]; 

Есть более продвинутые способы конвертировать в/из числовых значений с помощью NSNumberFormatter и т.д., если вам нужна более надежной поддержка. Там есть много документации.

+0

К сожалению, похоже, что решение не сработало. Ваш совет действительно помог как для этого, так и для будущего, но та же ошибка возникает. – blockaj

+0

В этом случае нам понадобится дополнительная информация о фактической ошибке. Например, установите контрольную точку исключения, предложенную @Kevin –

+0

. Похоже, проблема связана с кнопкой. В противном случае это не сбой. – blockaj

0

Войдите в навигатор проекта (левое окно) и перейдите на вкладку точек останова (выглядит как морковь), затем добавьте контрольную точку исключения. Эта точка останова должна показать вам, где произошел сбой. Я подозреваю, что проблема заключается в том, чтобы передать NSString в NSNumber. Вместо этого используйте intValue, floatValue или doubleValue.

-1

вы должны освободить память, использованную для этих переменных

release variableName; 

, например, я не уверен, какой типа NUMBERONE и NUMBERTWO являются

Смежные вопросы