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:¶m1 atIndex:2];
[inv setArgument:¶m2 atIndex:3];
[inv setArgument:¶m3 atIndex:3];
[inv invoke];
Authenticate_Obj * returnObject = nil;
[inv getReturnValue:&returnObject];
我建议您检查Erica Sadun的github存储库,该存储库调用以检查更多使用
NSInvocation
的代码示例,这是不对的。。。在非标准声明中容易犯错误。嗯,错误在哪里?(我假设声明中缺少用户参数名)选择器不正确。根据他的声明,它是Authenticate\u User::
。数字
、名称
和密码
位是参数名。