Objective-C中@selector中的多个参数

Objective-C中@selector中的多个参数,objective-c,selector,Objective C,Selector,如果这是必须调用的方法名称: -(Authenticate_Obj)Authenticate_User:(NSString*)Number:(NSString*)name:(NSString*)password 如何从@selector调用此方法 我可以这样做吗 [tis_obj AuthenticateMobileServer:self action:@selector(AuthenticateUser:::)]; 谢谢。您可以这样做:@selector(Authenticate\u Us

如果这是必须调用的方法名称:

-(Authenticate_Obj)Authenticate_User:(NSString*)Number:(NSString*)name:(NSString*)password
如何从@selector调用此方法

我可以这样做吗

[tis_obj AuthenticateMobileServer:self action:@selector(AuthenticateUser:::)];

谢谢。

您可以这样做:
@selector(Authenticate\u User:Number:name:)

因为Chris指出了为具有多个参数的方法声明选择器的正确语法

@selector(Authenticate_User:Number:name:) 
但是,您不能使用
-performSelector
方法(及类似方法)调用接受超过1个参数的方法-您必须使用该类来调用该方法,因为:

-(Authenticate_Obj)Authenticate_User:(NSString*)Number:(NSString*)name:(NSString*)password
您的方法的选择器是:

Authenticate_User:::
哪个字符串将传递给
@selector()

您的
AuthenticateMobileServer:action:
方法必须采用选择器,该选择器在调用时显然采用该参数集

然而,这段代码有几个问题(第一条线索是来自知识渊博的人的两个错误答案)

  • 方法名称不以大写字母开头,也不包含
    \uu
    s。方法名是大小写的。因此,类似于
    authenticateUserNumber:name:password:
    的方法名更合适

  • 每个参数都应该有一部分描述它的方法名。同样,
    authenticateUserNumber:name:password:
    符合标准惯例

  • 类名中没有
    。我假设Obj是一个类。如果是这样,它还需要作为指针返回

  • 也就是说,该方法可能类似于:

    - (AuthenticateObject *) authenticateUserNumber: (NSString*) aNum
                                               name: (NSString *) aName
                                           password: (NSString *) aPassword;
    

    发送一个
    NSMutableDictionary
    NSMutableArray
    ,其中包含所有需要的信息作为参数。

    您可以使用
    NSInvocation
    执行此操作:

    SEL selector = @selector(Authenticate_User:Number:name:);
    NSMethodSignature * ms = [self methodSignatureForSelector:selector];
    NSInvocation *inv = [NSInvocation invocationWithMethodSignature:ms];
    [inv setTarget:self];
    [inv setSelector:selector];
    [inv setArgument:&param1 atIndex:2];
    [inv setArgument:&param2 atIndex:3];
    [inv setArgument:&param3 atIndex:3];
    [inv invoke];
    Authenticate_Obj * returnObject = nil;
    [inv getReturnValue:&returnObject];
    

    我建议您检查Erica Sadun的github存储库,该存储库调用以检查更多使用
    NSInvocation

    的代码示例,这是不对的。。。在非标准声明中容易犯错误。嗯,错误在哪里?(我假设声明中缺少用户参数名)选择器不正确。根据他的声明,它是
    Authenticate\u User::
    数字
    名称
    密码
    位是参数名。