1. ホーム
  2. objective-c

[解決済み] Objective-Cです。複数の引数を持つセレクタを呼び出す

2022-05-07 14:49:23

質問

MyClass.m で、以下のように定義しました。

- (void) myTest: (NSString *) withAString{
    NSLog(@"hi, %@", withAString);
}

を作成し、MyClass.h で適切な宣言を行います。後で

[self performSelector:@selector(mytest:withAString:) withObject: mystring];

のようなエラーが表示されます。 * キャッチできない例外 'NSInvalidArgumentException' のためにアプリを終了する、理由: '*'. -[MyClass myTest:withAtring:]: unrecognized selector sent to instance 0xe421f0' です。

もっと単純に、引数を取らないセレクタで、コンソールに文字列を出力するケースを試してみましたが、これはうまくいきました。このコードのどこが問題で、どのように修正すればいいのでしょうか?ありがとうございます。

解決方法は?

メソッドシグネチャは

- (void) myTest:(NSString *)

withAStringがたまたまパラメータになっています(名前は誤解を招くので、セレクタのシグネチャの一部であるように見えます)。

このように関数を呼び出すと

[self performSelector:@selector(myTest:) withObject:myString];

動作するようになります。

しかし、他の投稿者が提案しているように、メソッド名を変更した方がいいかもしれません。

- (void)myTestWithAString:(NSString*)aString;

と呼び出す。

[self performSelector:@selector(myTestWithAString:) withObject:myString];