0

なぜこのエラーが発生し続けるのかわかりません。アプリのボタンを押すたびに、すべてがクラッシュします。コードは次のとおりです。

#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などには出ません。

4

3 に答える 3

1

firstNum と secondNum が UITextFields であると仮定するとtext、これらのオブジェクトのプロパティは になりますNSStrings。にキャストして数値に変換することはできませんNSNumber。これはポインタの型を変更するだけで、データの表現をテキストから数値に実際に変換することは何もしません。

最も簡単な解決策は次のとおりです。

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

プロパティはfloatValue実際にテキストをfloat. self.numberOneでは、 andself.numberTwoプロパティさえ必要ないのではないでしょうか? それでも行う場合は、これを行うことができます (必要な場合は self.finalNumber でも同様です)。

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

この@()構文は、プリミティブを関連付けられたオブジェクト型 (この場合はNSNumber.

また、同様の問題が発生しself.sum.text = (NSString *)self.finalValueます-Cキャスト演算子を使用できないため、実際に値を文字列に変換する必要があります。簡単な解決策は次のとおりです。

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

NSNumberFormatterより堅牢なサポートが必要な場合は、 などを使用して数値との間で変換するより高度な方法があります。それに関するドキュメントはたくさんあります。

于 2013-08-02T16:11:03.393 に答える
0

プロジェクト ナビゲーター (左側のウィンドウ) に移動し、ブレークポイント タブ (ニンジンのように見えます) に移動し、例外ブレークポイントを追加します。このブレークポイントは、クラッシュが発生した場所を示しているはずです。問題は NSString を NSNumber にキャストしようとしていると思われます。代わりに intValue、floatValue、または doubleValue を使用してください。

于 2013-08-02T16:12:11.043 に答える
-1

これらの変数に使用したメモリの割り当てを解除する必要があります

release variableName;

たとえば、 numberOne と numberTwo がどのタイプなのかわかりません

于 2013-08-02T16:16:17.327 に答える