【问题标题】:Dynamically calling a method with parameters动态调用带参数的方法
【发布时间】:2012-12-28 04:44:15
【问题描述】:

我知道可以像这样通过名称调用方法:

 NSString *string =@"methodName";
[self performSelector:NSSelectorFromString(string)];

并且它会执行下面的方法:

-(void)methodName
   {
              // todo:.....
   }

我想知道如何调用具有以下参数的方法:

-(void)methodName:(NSString *)_name :withValue (NSString *) value
     {
              // todo:.....
     }

【问题讨论】:

    标签: objective-c ios


    【解决方案1】:

    你可以使用 -performSelector:withObject:

    NSDictionary *dic = @{@"name":@"stringName",@"value":@"12"};
    
    NSString *string =@"methodName:";
    [self performSelector:NSSelectorFromString(string) withObject:dic];
    

    并在 -methodName:

    -(void) methodName:(id)obj
    {
        NSDictionary *dic = (NSDictionary *)obj;
        [self methodName:dic[@"name"] withValue:dic[@"value"]];
    }
    

    【讨论】:

    • 我不能直接将参数传递给方法?
    • 是的,据我所知,performSelector 是不可能的。您可以参考this answer 了解更多详情。如果你真的想要多个参数,也许你可以尝试调度。
    • 我同意你的回答,它对我有用,最好有一本字典,同时借助 key 传递参数,同时动态编码感谢 onevcat
    【解决方案2】:

    我不知道确切的语法,但您可以使用NSInvocation 做到这一点。

    【讨论】:

    【解决方案3】:

    嗯,我不知道到底需要什么,但据我了解,它类似于:

    NSArray *fruits = [NSArray arrayWithObjects:@"Apple", @"Mango", nil]; 
    NSArray *drinks = [NSArray arrayWithObjects:@"Drink1", @"Drink2",nil];
    [self serveOrdersWith:fruits andDrinks:drinks];
    

    在类中的某个地方,该方法将使用参数数组 fruits 调用,即

    -(NSArray*)serveOrdersWith :(NSArray*)array1 andDrinks:(NSArray*)array2{
         //Your code here but I will finish with this only
        NSArray *orderArray;
        [orderArray addObject:array1];
        [orderArray addObject:array2];
        return orderArray;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-23
      • 1970-01-01
      • 2015-05-29
      • 2012-10-15
      • 1970-01-01
      相关资源
      最近更新 更多