Ios 如何比较选择器?

Ios 如何比较选择器?,ios,objective-c,Ios,Objective C,我使用下面的块来测试元素是否是UIMenuController的“粘贴”项 ^(id element){ return [element respondsToSelector:@selector(action)] && [element action] == @selector(paste:) } 编译器报告了错误:“比较不同的块类型('void(^_Nullable)(void)'和'SEL')” 如何进行比较?由于元素被声明为id,编译器无法确定操作的数据类型。它基本上

我使用下面的块来测试元素是否是UIMenuController的“粘贴”项

^(id element){
  return [element respondsToSelector:@selector(action)] && [element action] == @selector(paste:)
}
编译器报告了错误:“比较不同的块类型('void(^_Nullable)(void)'和'SEL')”


如何进行比较?

由于
元素
被声明为
id
,编译器无法确定
操作
的数据类型。它基本上查找对名为
action
的方法的任何引用,并假定找到的类型。但对于所需类型的
SEL
,这可能不是正确的
操作

您可以使用强制转换告诉编译器,不要担心,这个
操作
将返回一个
SEL
。当然,如果您在运行时的假设是错误的,您的应用程序可能会崩溃

return [element respondsToSelector:@selector(action)] && [(UIMenuItem *)element action] == @selector(paste:)

这可确保编译器使用正确的
操作
方法。

元素
的数据类型及其
操作
属性是什么?@mschmidt无法使用'element.action',因为元素类型未知。感谢您的帮助。事实上,我试过了,并且得到了“ARC不允许对指向“SEL”的块指针进行强制转换”。尝试:
…&&[(UIMenuItem*)元素操作]==…