代码之家  ›  专栏  ›  技术社区  ›  suse

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

  •  2
  • suse  · 技术社区  · 15 年前

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

    -(Authenticate_Obj)Authenticate_User:(NSString*)Number:(NSString*)name:(NSString*)password
    

    如何从@selector调用此方法??

    我能这样做吗??

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

    谢谢您。

    5 回复  |  直到 13 年前
        1
  •  3
  •   juco    13 年前

    正如Chris指出的那样,声明具有多个参数的方法的选择器的正确语法是

    @selector(Authenticate_User:Number:name:) 
    

    但是,不能使用 -performSelector 方法(和类似方法)-您必须使用 NSInvocation 类为

        2
  •  8
  •   bbum    15 年前

    鉴于此:

    -(Authenticate_Obj)Authenticate_User:(NSString*)Number:(NSString*)name:(NSString*)password
    

    方法的选择器是:

    Authenticate_User:::
    

    你要传给哪根绳子 @selector() .

    你的 AuthenticateMobileServer:action: 方法必须采用一个选择器,当调用该选择器时,显然会采用该参数集。

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

    1. 方法名称不以大写字母开头,也不以大写字母开头 _ 它们在里面。方法名采用驼色大小写。所以,有点像 authenticateUserNumber:name:password: 将是更合适的方法名。

    2. 每个参数都应该有一部分方法名来描述它。再一次, authenticateUserNumber:名称:密码: 符合标准惯例。

    3. 类名没有 γ 在他们里面。我假设authenticate-obj是一个类。如果是这样,它还需要作为指针返回。

    也就是说,这种方法应该类似于:

    - (AuthenticateObject *) authenticateUserNumber: (NSString*) aNum
                                               name: (NSString *) aName
                                           password: (NSString *) aPassword;
    
        3
  •  2
  •   Chris Eidhof    15 年前

    你可以这样做: @selector(Authenticate_User:Number:name:)

        4
  •  0
  •   atxe AlianaWolf    13 年前

    你可以用 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存储库 NSObject-Utilities 检查更多代码示例 NS调用 .

        5
  •  0
  •   The iOSDev fibnochi    13 年前

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

    推荐文章