有没有更好的方法从其子视图访问文档?

时间:2011-11-03 21:38:57

标签: objective-c cocoa nsdocument nsundomanager document-based

我的文档中有一些类,例如我需要从子视图访问的NSNotificationCenter和NSUndoManager。

现在我可以通过这样的方式访问它们:

NSUndoManager *undoManager = [[[[[self view] window] windowController] document] undoManager];

有一种我不了解的更好的方法吗?感谢。

1 个答案:

答案 0 :(得分:3)

为什么视图需要担心撤消管理器?似乎有些重构可能就在那里。

通常,视图可能会在第一个响应者中触发某些操作。然后,该操作将被传递到响应器链,直到它找到响应该操作的对象(例如窗口控制器或文档)。 “撤消”事件通常会影响数据模型,因此文档会处理类似的事情。当用户撤消上一个操作时,模型将恢复为先前状态,视图层次结构将反映该更改。

在您的情况下是否可以将处理撤消管理器的责任移至文档?

同样适用于通知中心。如果文档有通知中心,为什么视图会尝试使用它?您是否可以利用上述响应者链来获取文档消息?如果更合适,还可以使用+defaultNotificationCenter获得默认通知中心。