1

好的,这是我的情况,我真的不确定使用哪种设计方法。因此,我很高兴阅读有关我的特定案例的一些输入...

场景:

  • 我有一个基于标签的应用程序
  • 最初,我们创建一个NSWindowController(eg MyDocumentManager) 的实例,它负责选项卡的创建/操作
  • 每个选项卡包含(= 附加到)一个实例MyDocument

现在,我将要实现菜单操作。

  • 每个菜单都有一个单独的菜单控制器(实际上是NSObject所有相关功能分组的子类),例如MyFileMenuController
  • 文件菜单的动作MyFileMenuController通过 Interface Builder 链接到对象中的动作

问题:

  • 怎么可能MyFileMenuController “知道”MyDocumentManager在 my 中创建AppDelegate.m),以便我们可以访问当前文档详细信息并执行所有相关操作?有任何想法吗?哪种方法更可取?

我的想法:

  • 将对象从一个类传递到另一个类(听起来不太好)
  • 单身人士(尽管老实说我从未使用过它们,也不知道它是否/如何是我的特殊情况)
  • 通知和通知监听器
  • (从对面看,虽然不确定)委托方法
4

2 回答 2

0

我会创建一个链接到 appDelegate.rootViewController 的初始 UIViewController。

在这个新的视图控制器(就叫它“mainViewController”)中,我会放置我的 tabBar 和 menuController。

我了解您的界面类似于带有 leftBarbutton 的 facebook,它可以进行水平滚动并发现菜单。所以在这个 leftBarButton 的选择器中,我会调用如下方法:

- (void)discoverMenuForDocument:(MyDocument*)document {
    // Set menu configuration for specific document
    // Make animation to discover menu
}

其中文件可能是这样的:

self.selectedViewController (<-- You cand make this in several ways depending on your code...) 

意识到 (MyDocument*) 不是一个对象,而只是一个引用,所以在我看来这样做没有任何问题。

祝你好运!

于 2013-02-16T12:38:46.890 回答
0

好的(不确定这是否是最好的方法),但这是我决定做的:

[[[NSApplication sharedApplication] delegate] MyDocumentManager]

所以,只要一个对象是我的 AppDelegate 的一部分,我就可以从任何地方访问它。

于 2013-02-16T12:20:42.123 回答