我有一个可可框架的架构问题。在NSViewController和NSTableViewDelegate之间共享方法
所以事情是,在我的应用我有一个马西德威包含2子视图:
- RecentFilesTableView包含最近使用的用户文件。用户将通过双击选择文件。
- OtherFileView用'打开另一个文件'调用NSOpenPanel。
这两种观点都将在年底方法调用:openFileWithUrl(网址:NSURL)
所以,问题是:什么是最好的(最苹果)进行存档呢?
解决方案1
我把方法openFileWithUrl(网址:NSURL)在MasterViewConroller
我RecentFilesTableDelegate将参考MasterViewConroller,将调用该方法。
我把控制器放在OtherFileView在MasterViewConroller。
缺点:引用地狱(这个类引用这个,引用这个等等..)。
解决方案2
我会用MasterViewConroller作为一个真正主控制器,将在“近期的表”既双击作出反应,并点击“打开另一个文件”按钮。
我将不得不从RecentFilesTableView得到选定的文件。我没有看到这样做的方法(ofc。我可以将tableView.dataSource()投射到我的类,但我相信干净的设计不涉及这样的投射)。
缺点:一个班级统治他们。
解决方案3
正如我不能创建一个超两个RecentTableDelegate和MasterViewController我可以用斯威夫特扩展到开放方法添加到他们。但那不是很OOP。
那么苹果世界做这种事情的模式是什么?
请不要滥用标签。这个问题没有任何关系与Swift,Objective-C,当然不是iOS。 – nhgrif
您是否考虑过绑定或第一响应者? – Willeke