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

Objective c 我可以在不触发其事件侦听器的情况下调用方法吗?,objective-c,cocoa,event-handling,osc,Objective C,Cocoa,Event Handling,Osc,是否有任何类型的标志或方法可以在不触发任何事件处理程序的情况下调用方法 例如 我正在处理一个controlTextDidChange方法,并检查击键返回的字符是否有效。如果不是,我就把它拿走;如果是,我会加上一个词。问题是,当我在controltextdichange中更改文本时,会再次调用controltextdichange,程序将无限期循环。我知道我可以使用实例变量来解决这个问题,但是有没有什么标志或方法可以在不触发任何事件处理程序的情况下调用方法?将注释扩展为快速答案 您有一个通过设计发

是否有任何类型的标志或方法可以在不触发任何事件处理程序的情况下调用方法

例如
我正在处理一个
controlTextDidChange
方法,并检查击键返回的字符是否有效。如果不是,我就把它拿走;如果是,我会加上一个词。问题是,当我在
controltextdichange
中更改文本时,会再次调用
controltextdichange
,程序将无限期循环。我知道我可以使用实例变量来解决这个问题,但是有没有什么标志或方法可以在不触发任何事件处理程序的情况下调用方法?

将注释扩展为快速答案

您有一个通过设计发出通知的方法。您希望它不要发出该通知。您没有一个替代方案可以在没有通知的情况下执行相同的操作。如果您希望它永远不会发出该通知,并且您可以访问该方法的代码,您可以将该方法添加到您刚刚注释掉该通知的版本中。当然,如果您有代码,您可以添加另一个方法,并调用该方法。所以你没有密码,所有这些都没有意义

难道你不能在删除监听器然后恢复监听器的代码中包含这个调用吗?换句话说,psuedocode如下所示:

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

然后,您对myMethod的一次调用的通知置若罔闻。我在绑定和KVO方面也做过类似的工作。

您在循环中感觉如何?如果文本有效,则不要更改它,循环结束。如何使文本有效意味着必须使文本无限次有效?正在验证的文本是一个
char
。如果它是一个有效的
char
字符,我会在它后面添加一个单词,从而更改文本并再次调用事件处理程序;一旦文本有效,正如@stevesliva所说,您不应该再次更改文本。即“文本更改”->“有效性检查”->“无效,修复”->“文本更改”->“有效性检查”->“确定;不更改任何内容”->“完成”。逻辑没有问题。在我的文本字段中,我不想输入整个下一个世界,只需输入第一个字母。比如说,下一个单词是“你好”。如果我按“q”,那是无效的,因为“hello”不是以“q”开头的,所以我删除了“q”。但如果我按“h”,那么这是有效的,程序会附加“ello”,从而将文本字段的文本从“h”更改为“hello”。但所有这些都与问题无关。这只是一个示例,用于说明我希望有选择地禁止特定方法调用的事件处理程序的情况。否。不是真的。你可以创建一个类别来swizzle
myMethod
,但是你需要知道如何实现除通知之外的所有功能,如果你没有
myMethod
代码,这将很困难。是的,我可以做到,而且比切换实例BOOL更干净。我猜最终苹果是用一个
\uuu静默的
标识符还是我这样做的,最终会有人实现这个版本。