我之前在这里提出了一个关于使用First Responder的问题 - 并在此得到了答复:
有人会介意给我一个“傻瓜”版本吗?作为Cocoa的新手,我真的不知道从哪种方法开始。我快速给出答案
扎克
答案 0 :(得分:22)
First Responder具体为this。
你所询问的是目标行动。你有一个UI对象(按钮,菜单项),你需要导致多个事情发生,但UI对象只发送一个动作。
因此解决方案:让该行动做多件事。
将UI对象挂钩到您在控制器对象中实现的操作方法(在您的情况下,文档中)。在该方法中,执行按钮需要执行的所有操作。
子类化解决方案基本上是相同的,除了不将UI对象挂钩到文档,你将它连接到字体管理器,但你也使字体管理器成为你创建的NSFontManager的子类的实例,而不是直接的NSFontManager的实例。在您的子类中,您重写addFontTrait:
并在实现中添加其他行为。在该方法的开始或结束时,您发送[super addFontTrait:sender]
以调用NSFontManager的实现,因此原始实现完成。
长段落,但实际上并没有那么多工作:不同之处只是制作子类并使实例成为该子类的实例。
之前您已经说过“Apple文档非常模糊”,但事实并非如此。恰好有很多,也许你没有看过正确的文件。
这些是您需要阅读的文档,从头到尾,按顺序:
编辑:此列表适用于Xcode 3.我在another answer发布了此列表的更新(适用于Xcode 4)版本。
还有Instruments User Guide,但不幸的是,一个 含糊不清 - 或者更准确地说,是不完整的。它省略了许多有用的信息,比如如何使用Instruments的Zombies模板来调试崩溃。这是一个高级概述,仅此而已。
另外,将这些书签加入:
这是很多阅读,但它会告诉你需要知道的一切,而且这个顺序大致就是你需要知道的顺序。
答案 1 :(得分:1)
另一个答案说你有两个选择:
首先:用您创建的动作替换动作,然后自己实现原始版本的功能。在这种情况下,只需调用NSFontManager
的适当方法即可。也就是说,您将原始功能添加到您自己的方法实现中。这样,两个动作都会被执行。
第二:对实现原始功能的类进行子类化,并通过覆盖名为-addFontTrait
的方法添加实现。这样,您的代码就会“并行”执行。 This question可能会帮助您找到正确的实施方案。
因此,重要的是您可以将原始功能添加到您的实现中,或者反过来。在这种情况下,我会尝试第一个。