我可以在不触发其事件监听器的情况下调用方法吗?

时间:2014-05-02 04:18:44

标签: objective-c cocoa event-handling osc

在没有触发任何事件处理程序的情况下,是否有任何类型的标志或方法来调用方法?

例如 我正在处理controlTextDidChange方法并检查按键返回的字符是否有效。如果不是,我将其删除;如果是的话,我会追加一个字。问题是当我在controlTextDidChange中更改文本时,再次调用controlTextDidChange并且程序将无限循环。我知道我可以使用一个实例变量来解决这个问题,但有没有任何类型的标志或方法来调用方法而不触发任何事件处理程序?

1 个答案:

答案 0 :(得分:0)

将评论扩展为快速回答。

您有一种按设计发出通知的方法。您希望它不发出该通知。您没有可用的替代方案可以执行与通知无关的相同操作。如果您希望它永远不会发出该通知,并且您可以访问该方法的代码,则可以swizzle将该方法添加到您刚刚注释掉通知的版本中。当然,如果你有代码,你可以添加另一个方法,然后调用它。所以你没有代码,所有这些都没有用。

您是否只能在删除侦听器的代码中包含该调用,然后还原侦听器?换句话说,像这样的伪代码

[self.controlThingy removeObserver:self]
[self.controlThingy myMethod]
[self.controlThingy addObserver:self]

然后,您对myMethod的一次调用发出了自我聋的通知。我用绑定和KVO完成了类似的事情。