如何将NSNumber传递给期望bool的方法?

Jon*_*an. 6 object objective-c nsnumber

[[self.view.window subviews] makeObjectsPerformSelector:@selector(setUserInteractionEnabled:) withObject:[NSNumber numberWithBool:NO]];
Run Code Online (Sandbox Code Playgroud)

我在另一个问题的答案中看到了这段代码(如何禁用除最顶层视图之外的所有视图的触摸输入?)并且当它工作时它让我感到惊讶,因为setUserInteractionEnabled:期望一个BOOL(因为它不是一个Objective-c对象不能以performSelector:withObject:类型方法传递).

哪个文档说通过NSNumber是好的?它适用于所有方法,还是需要特殊实现?它是否仅适用于BOOL,还是可以使用类似的类型int

jrt*_*ton 3

如果您只是想让代码正常工作,请投票并接受 Paul.s 的答案。如果您想了解书呆子进行实验的信息,请继续。对我原来答案的评论中有一些有趣的讨论,我总结如下。

这是行不通的。我在iOS项目中尝试过,userInteractionEnabled属性不受发送影响performSelector:withObject:这与 NSObject 的文档相符,其中指出:

aSelector 应该标识一个采用 id 类型的单个参数的方法。对于具有其他参数类型和返回值的方法,请使用 NSInitation。

现在的传奇人物Peter Hosey在这里构建了一个示例基础工具,当你向它传递一个 double 值时,它的工作效果非常奇怪,正如我自己发现的那样,它也是一个 float 值。

为了增加好奇心,这在 iOS 项目中不起作用(双精度或浮点)。

综上所述,我认为我们可以这样说:

  • 如果它确实有效,那么它的工作是偶然的,不应依赖它
  • 关于堆栈溢出的接受或赞成的答案不一定是正确的