1. ホーム
  2. iphone

[解決済み] iOS - 複数の引数とafterDelayを持つperformSelectorを実装する方法とは?

2023-03-06 17:39:12

質問

iOS初心者です。以下のようなセレクタメソッドを持っています。

- (void) fooFirstInput:(NSString*) first secondInput:(NSString*) second
{

}

私はこのようなものを実装しようとしています。

[self performSelector:@selector(fooFirstInput:secondInput:) withObject:@"first" withObject:@"second" afterDelay:15.0];

というエラーが出ますが

Instance method -performSelector:withObject:withObject:afterDelay: not found

何が欠けているのか、何か思い当たることはありますか?

どのように解決するのですか?

個人的には、NSInvocationを使用するのがより近い解決方法だと思います。

以下のようなものが、その仕事をします。

インデックスパス そして データソース は同じメソッドで定義された2つのインスタンス変数です。

SEL aSelector = NSSelectorFromString(@"dropDownSelectedRow:withDataSource:");

if([dropDownDelegate respondsToSelector:aSelector]) {
    NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[dropDownDelegate methodSignatureForSelector:aSelector]];
    [inv setSelector:aSelector];
    [inv setTarget:dropDownDelegate];

    [inv setArgument:&(indexPath) atIndex:2]; //arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation
    [inv setArgument:&(dataSource) atIndex:3]; //arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation

    [inv invoke];
}