【问题标题】:How to Create a Dynamically Named Selector inside a Method如何在方法中创建动态命名的选择器
【发布时间】:2012-10-12 11:55:48
【问题描述】:

我有一个客观的 C 方法,它传入一个字符串和一个整数作为它的参数。在这个方法中,我想使用一个选择器——它的名称基于我传入的整数值。例如,如果整数参数是 5,我希望选择器命名为“buildXArrayIndex5”,或者如果整数参数是 3,我希望选择器命名为“buildXarrayIndex3”。我真的不知道如何做到这一点,或者它是否可能/合理。我是目标 C 的新手,所以我写出了我想要发生的事情,但它不是工作/有效的代码。但这里是:

- (void) startBuildingXArray:(int)senderID:(NSString *)moveTrackerObject {

NSString *methodNamePrefix = @"buildXArrayIndex";

NSString *realMethodName = [[NSString alloc]initWithFormat:@"%@%d",methodNamePrefix,   
senderID];

SEL realSelector = NSSelectorFromString(realMethodName);

[self realSelector: moveTrackerObject];

}

在界面中,我声明了SEL realSelector;但是我在没有运行它的情况下得到一个错误,上面写着“没有可见的@interface 声明了选择器 realSelector。”但我确信这不是这段代码的唯一问题。谁能告诉我如何为此创建正确的代码或突出显示更好的方法?

【问题讨论】:

标签: objective-c methods arguments selector


【解决方案1】:

您需要使用-performSelector: 方法调用您的选择器,例如:

[self performSelector:realSelector];

另外,如果你想调用的方法接受参数,你需要在选择器名称中添加一个冒号:

NSString *realMethodName = [[NSString alloc]initWithFormat:@"%@%d:",methodNamePrefix, senderID];

然后调用它:

[self performSelector:realSelector withObject:moveTrackerObject];

【讨论】:

  • 谢谢——不过还有一个问题——现在我收到一条错误消息,提示“performSelector 可能会导致泄漏,因为它的选择器未知。”我一定是错过了什么......
  • @user1697845,检查这个问题stackoverflow.com/questions/11895287/…。看来您必须使用编译指示来抑制警告
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-06
  • 1970-01-01
相关资源
最近更新 更多