0

電話する

[delegate addText:button.titleLabel.text withSelector:@selector(addElement:) fromKeyboard:self.name]

これに対応します

- (void)addText:(NSString *)text withSelector:(SEL)selectorName fromKeyboard:(NSString *)name {

   [tempData performSelector:@selector(selectorName) withObject:text];

}

ただし、tempDataでperformセレクターメソッドを呼び出すと、エラーが発生します。SelectorNameを(addElement :)に置き換えると、正常に機能します。

4

3 に答える 3

4

お前はそう書いてるだけ

[tempData performSelector:selectorName withObject:text];

それはすでにセレクターなので、 @selectr(...) と書く必要はありません

于 2012-07-22T11:21:06.623 に答える
3

@selector(selectorName) 忘れた: @selector(selectorName:)

于 2012-07-22T11:20:36.107 に答える
1

@selector()ここでの構成には少し混乱があるようです。

この場合@selector(selectorName)、中かっこ内の名前を持つセレクターのリテラルです (引用符内の C 文字列のリテラルと selectorNameよく似ています。これは、名前付きのセレクターをオブジェクトに送信しようとしていることを意味しますが、失敗します。"selectorName"selectorNametempData

名前で送信するセレクターを渡したい場合は、次のNSSelectorFromString()関数を使用します。

- (void)addText:(NSString *)text withSelector:(NSString *)selectorName fromKeyboard:(NSString *)name {
 [tempData performSelector:NSSelectorFromString(selectorName) withObject:text];
}

この場合、次を使用してレシーバーがセレクターに応答することを確認することをお勧めします。-respondsToSelector:

于 2012-07-22T11:26:21.627 に答える