如何通过Objective C中的@selector函数传递参数


- (IBAction)alertShow:(NSButton *)sender {

MHAlert* alert = [[MHAlert alloc]initWithMessageTitle:@"message" infoText:@"infoText" btnTitle:@"OK" target:self action:@selector(test:) secondBtnTitle:nil target:nil action:nil];
[alert runModal];
}
- (void)test:(void(^)(BOOL isSuccess))handler
{
if (handler) {
handler(YES);
}
else
{
handler(NO);
}

}

我想通过@selector(test:(传递一个参数,这是一个块类型的参数,我检查了test:方法中的处理程序,发现它是而不是nil,正如代码所示。如果没有,我如何将nil值传递给测试:方法。

我不想使用perform:方法,也不想在网上搜索后包装一个mew方法。

在initWithMessageTitle实现中使用带参数初始化的NSInvocation,并调用。

- (instancetype)initWithMessageTitle:(NSString *)message infoText:(NSString *)info btnTitle:(NSString *)title target:(id)target action:(SEL)action secondBtnTitle:(NSString *)secondTitle target:(id)secondTarget action:(SEL)secondAction
{
NSMethodSignature *sig = [[target class] instanceMethodSignatureForSelector:action];
NSInvocation* invoc = [NSInvocation invocationWithMethodSignature:sig];
//[invoc setArgument: atIndex:2];
invoc.selector = action;
[invoc invokeWithTarget:target];
}

填充它并调用受Cy-4AH启发的invoke。

最新更新