目标c-全局访问类实例-优化设计方法



好吧,这是我的情况,我真的不确定该使用哪种设计方法。所以,我很乐意阅读一些关于我的特殊案例的意见。。。

场景:

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

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

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

问题:

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

我的想法:

  • 在类之间传递对象(听起来没那么好)
  • 单身汉(尽管我真的从来没有用过,也不知道这是否/怎么会是我的特殊情况)
  • 通知&通知监听器
  • (从相反的角度来看,尽管不确定)Delegate方法

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

[[[NSApplication sharedApplication] delegate] MyDocumentManager]

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

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

在这个新的视图控制器(只需称之为"mainViewController")中,我会放置我的tabBar和menuController。

我知道你的界面类似于facebook,有一个左Barbutton,可以水平滚动并发现菜单。因此,在这个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*)不是一个对象,只是一个引用,所以在我看来这样做没有任何问题。

祝你好运!

相关内容

  • 没有找到相关文章

最新更新