好吧,这是我的情况,我真的不确定该使用哪种设计方法。所以,我很乐意阅读一些关于我的特殊案例的意见。。。
场景:
- 我有一个基于选项卡的应用程序
- 最初,我们创建一个
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*)不是一个对象,只是一个引用,所以在我看来这样做没有任何问题。
祝你好运!