2015-11-19 60 views
1

我有一个可可框架的架构问题。在NSViewController和NSTableViewDelegate之间共享方法

所以事情是,在我的应用我有一个马西德威包含2子视图:

  • RecentFilesTableView包含最近使用的用户文件。用户将通过双击选择文件。
  • OtherFileView用'打开另一个文件'调用NSOpenPanel。

这两种观点都将在年底方法调用:openFileWithUrl(网址:NSURL)

所以,问题是:什么是最好的(最苹果)进行存档呢?

解决方案1 ​​

我把方法openFileWithUrl(网址:NSURL)MasterViewConroller

RecentFilesTableDelegate将参考MasterViewConroller,将调用该方法。

我把控制器放在OtherFileViewMasterViewConroller

缺点:引用地狱(这个类引用这个,引用这个等等..)。

解决方案2

我会用MasterViewConroller作为一个真正控制器,将在“近期的表”既双击作出反应,并点击“打开另一个文件”按钮。

我将不得不从RecentFilesTableView得到选定的文件。我没有看到这样做的方法(ofc。我可以将tableView.dataSource()投射到我的类,但我相信干净的设计不涉及这样的投射)。

缺点:一个班级统治他们。

解决方案3

正如我不能创建一个超两个RecentTableDelegate和MasterViewController我可以用斯威夫特扩展到开放方法添加到他们。但那不是很OOP。

那么苹果世界做这种事情的模式是什么?

+0

请不要滥用标签。这个问题没有任何关系与Swift,Objective-C,当然不是iOS。 – nhgrif

+0

您是否考虑过绑定或第一响应者? – Willeke

回答

0

由于您希望避免重复实施openFileWithUrl(url: NSURL),因此您可以为这些类型的操作创建单独的类,如NetworkManager。这个解决方案与苹果的NSFileManager一致。当您需要执行该操作时,请创建该类的实例并调用该函数。

+0

这位经理将如何将该文件的内容放入OtherFileView? – Willeke

+0

感谢您的帮助Daniel。我只是认为可能有一些设计模式,我应该遵循这种操作。而对于你的问题Willeke:其实我不需要在OtherFileView中引用这个对象。所以问题解决了。 –

+0

@MailSO你正在考虑这样的事情真是太棒了。我很高兴它解决了。 – Daniel