1

簡単な電卓を作成していますが、追加ボタンを使用すると、iOS シミュレーターがクラッシュし、NSInvalidArgumentException が発生します。これを防ぐにはどうすればよいですか?エラーレポート:

2013-06-23 17:18:54.574 Tutorial Test (Storyboard)[9744:c07] -[ViewController2 addition]:     
unrecognized selector sent to instance 0x75858f0
2013-06-23 17:18:54.577 Tutorial Test (Storyboard)[9744:c07] *** Terminating app due to 
uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController2 addition]: 
unrecognized selector sent to instance 0x75858f0'
*** First throw call stack:
(0x1c91012 0x10cee7e 0x1d1c4bd 0x1c80bbc 0x1c8094e 0x10e2705 0x162c0 0x16258 0xd7021     
0xd757f 0xd66e8 0x45cef 0x45f02 0x23d4a 0x15698 0x1becdf9 0x1becad0 0x1c06bf5 0x1c06962 
0x1c37bb6 0x1c36f44 0x1c36e1b 0x1beb7e3 0x1beb668 0x12ffc 0x1e2d 0x1d55)
libc++abi.dylib: terminate called throwing an exception
(lldb)

このエラーがある ViewController のコード:

Controller.h を表示

#import <UIKit/UIKit.h>
//Calculator
@interface ViewController2 : UIViewController{

IBOutlet UITextField *textField1;
IBOutlet UITextField *textField2;
IBOutlet UILabel *label;
}

-(IBAction)addition;
-(IBAction)subtract;
-(IBAction)multiply;
-(IBAction)divide;
-(IBAction)clear;

@end

Controller.m を表示

//Addition
-(IBAction)plus
{
float a = ([textField1.text floatValue]);
float b = a+([textField2.text floatValue]);
label.text = [[NSString alloc] initWithFormat:@"%2.f", b];
}
4

4 に答える 4

2

ではなく、.mファイル内のメソッドに名前を付けました。メソッドが見つからないのはそのためです。修正するには、ファイル内のメソッドの名前を から に変更します。plusadditionaddition.mplusaddition

//Addition
-(IBAction)addition
{
    float a = [textField1.text floatValue];
    float b = [textField2.text floatValue];
    label.text = [[NSString alloc] initWithFormat:@"%2.f", a+b];
}
于 2013-06-23T22:32:30.673 に答える
0

ViewController2クラスのインスタンスを割り当てましたか?

例えば:

ViewController2 *vc2 = [[ViewController2 alloc] init];
[vc2 addition];

また、投稿した.mコードがそのファイルの完全な内容である場合、あなたも欠けています

-(IBAction)addition {
    ...
}
于 2013-06-23T22:33:03.717 に答える
0

正しい方法を実装していません。

呼び出しますadditionが、実際に実装することはありません。.h でメソッド シグネチャを宣言するだけでは不十分です。メソッドをコーディングする必要があります。

于 2013-06-23T22:32:26.740 に答える
-1

これは、呼び出しているセレクターが、呼び出したクラスで使用できないことを意味します。最善の方法は、メソッドが呼び出される場所にブレークポイントを配置することです。デバッガーに移動し、オブジェクトを po します。

po 0x75858f0 

この場合には。ただし、その数値はオブジェクトである可能性があり、異なる可能性があります。コンソールの数字を見てください。

オブジェクトが適切なクラスであることを確認してください。次に、そのクラスをチェックして、呼び出しているセレクターに応答することを確認します。

編集:あなたの問題は、プラス メソッドの名前を追加に変更する必要があることです。.h 内の名前は、.m 内の名前と一致する必要があります

于 2013-06-23T22:31:57.283 に答える