如果这是必须调用的方法名称:
-(Authenticate_Obj)Authenticate_User:(NSString*)Number:(NSString*)name:(NSString*)password
如何从@selector ??
调用此方法我可以这样做吗?
[tis_obj AuthenticateMobileServer:self action:@selector(AuthenticateUser:::)];
谢谢。
答案 0 :(得分:8)
鉴于此:
-(Authenticate_Obj)Authenticate_User:(NSString*)Number:(NSString*)name:(NSString*)password
您方法的选择器是:
Authenticate_User:::
您要传递给@selector()
的字符串。
你的AuthenticateMobileServer:action:
方法必须采用一个选择器,当被调用时,显然会采用这组参数。
然而,这段代码存在一些问题(第一个线索是其他非常知识渊博的人的两个错误答案)。
方法名称不以大写字母开头,也不包含_
个。方法名称是驼峰式的。因此,像authenticateUserNumber:name:password:
这样的方法名称会更合适。
每个参数都应该包含描述它的方法名称的一部分。同样,authenticateUserNumber:name:password:
符合标准做法。
班级名称中没有_
。我假设Authenticate_Obj是一个类。如果是这样,它也需要作为指针返回。
即,该方法应该类似于:
- (AuthenticateObject *) authenticateUserNumber: (NSString*) aNum
name: (NSString *) aName
password: (NSString *) aPassword;
答案 1 :(得分:3)
正如Chris指出的那样,正确的语法为具有多个参数的方法声明选择器
@selector(Authenticate_User:Number:name:)
但是你不能使用-performSelector
方法(和类似方法)调用一个多于1个参数的方法 - 你必须使用NSInvocation类
答案 2 :(得分:2)
你可以这样做:@selector(Authenticate_User:Number:name:)
答案 3 :(得分:0)
发送NSMutableDictionary
或NSMutableArray
,其中包含所有必需的信息作为参数。
答案 4 :(得分:0)
您可以使用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];
我建议您查看名为NSObject-Utilities的Erica Sadun的github存储库,以查看NSInvocation
的更多代码示例。