【问题标题】:Unrecognized selector error with performSelector: methodperformSelector: 方法出现无法识别的选择器错误
【发布时间】:2012-07-22 11:15:41
【问题描述】:

我打电话

[delegate addText:button.titleLabel.text withSelector:@selector(addElement:) fromKeyboard:self.name]

对应于

- (void)addText:(NSString *)text withSelector:(SEL)selectorName fromKeyboard:(NSString *)name {

   [tempData performSelector:@selector(selectorName) withObject:text];

}

但是,当我在 tempData 上调用执行选择器方法时,我得到了错误。当我用 (addElement:) 替换 selectorName 时,它​​工作正常。

【问题讨论】:

    标签: objective-c selector unrecognized-selector performselector


    【解决方案1】:

    你只会这样写

    [tempData performSelector:selectorName withObject:text];
    

    它已经是一个选择器所以你不需要写@selectr(...)

    【讨论】:

      【解决方案2】:

      @selector(选择器名称) 你忘记 : @selector(selectorName:)

      【讨论】:

      • 不幸的是,它不起作用。我试过 addElement/selectorName、addElement:/selectorName:、addElement:/selectorName 和 addElement/selectorName:
      • @divol,也许不是 OP 的问题,但它对我的情况有所帮助。
      【解决方案3】:

      这里的@selector() 构造似乎有点混乱:

      @selector(selectorName) 是选择器的文字,名称在大括号内, selectorName 在这种情况下(很像 "selectorName" 是引号内的 C 字符串的文字。这意味着您正在尝试将名为 selectorName 的选择器发送到 tempData 对象,但失败了。

      如果要传入选择器按名称发送,请使用NSSelectorFromString() 函数:

      - (void)addText:(NSString *)text withSelector:(NSString *)selectorName fromKeyboard:(NSString *)name {
       [tempData performSelector:NSSelectorFromString(selectorName) withObject:text];
      }
      

      在这种情况下,最好使用-respondsToSelector:确保接收者响应选择器

      【讨论】:

        猜你喜欢
        • 2012-04-04
        • 2019-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-07
        • 1970-01-01
        相关资源
        最近更新 更多