是否有任何类型的标志或方法来调用方法而不触发任何事件处理程序?
例如我正在处理controlTextDidChange
方法并检查击键返回的字符是否有效。如果不是,我就把它去掉;如果是,我就加一个单词。问题是,当我在controlTextDidChange
中更改文本时,再次调用controlTextDidChange
,程序将无限循环。我知道我可以使用实例变量来解决这个问题,但是是否有任何类型的标志或方法来调用方法而不触发任何事件处理程序?
将评论展开为一个快速的回答。
您有一个按设计发出通知的方法。你希望它不发出那个通知。你没有一个可用的替代方案可以在没有通知的情况下做同样的事情。如果您希望它永远不会发出那个通知,并且您可以访问该方法的代码,那么您可以将该方法转换为刚刚注释掉通知的版本。当然,如果你有代码,你可以添加另一个方法,然后调用那个。所以你没有代码,所有这些都没有意义。
难道你不能在删除侦听器然后恢复侦听器的代码中把调用括起来吗?换句话说,psuedocode像这样:
[self.controlThingy removeObserver:self]
[self.controlThingy myMethod]
[self.controlThingy addObserver:self]
你已经让自己对myMethod调用的通知充耳不闻。我对绑定和KVO做过类似的事情。