为什么 sendAction: 不起作用而 performSelector: 起作用?

Car*_*osa 5 cocoa objective-c nsapplication

我有一个支持目标操作机制的自定义类,但奇怪的是在这种特定情况下,当我尝试通过执行以下操作来调用操作时:

[NSApp sendAction:action_ to:target_ from:self]
Run Code Online (Sandbox Code Playgroud)

它不起作用,但这种方式可以:

[target_ performSelector:action_ withObject:self];
Run Code Online (Sandbox Code Playgroud)

显然,两者target_action_具有有效的值。

这没什么大不了的,因为我让它工作了。

我只是不知道为什么-[NSApplication sendAction:to:from:]不起作用,因为这看起来像是一个非常基本的操作。我过去一直在使用sendAction:...没有问题,但这两者之间似乎存在一些显着差异,除了sendAction具有一种机制来查找响应消息的对象(如果其目标是nil.

Rav*_*mio 0

你确定NSApp不是nil你的时间吗sendAction:to:from:

如果是的话,什么也不会发生。为了确保NSApp是一个有效的对象,请[NSApplication sharedApplication]至少执行一次,或将它们组合起来:

[[NSApplication sharedApplication] sendAction:action_ to:target_ from:self];
Run Code Online (Sandbox Code Playgroud)