gpt4 book ai didi

macos - 在 NSViewController 和 NSTableViewDelegate 之间共享方法

转载 作者:行者123 更新时间:2023-12-03 17:19:56 26 4
gpt4 key购买 nike

我的 cocoa 框架存在架构问题。

所以问题是,在我的应用程序中,我有一个包含 2 个 subview 的 MasterView:

  • RecentFilesTableView 其中包含用户最近使用的文件。用户将通过双击选择文件。
  • OtherFileView 带有一个“打开另一个文件”按钮,可调用 NSOpenPanel。

两个 View 都会在最后调用方法:openFileWithUrl(url: NSURL)

所以问题是:最好的(最苹果的)存档方式是什么?

解决方案1

我将方法openFileWithUrl(url: NSURL)放在MasterViewConroller

我的RecentFilesTableDelegate将引用MasterViewConroller并调用该方法。

我将OtherFileView的 Controller 放置在MasterViewConroller中。

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

解决方案2

我将使用 MasterViewConroller 作为真正的 Controller ,它将对双击“最近的表格”和单击“打开另一个文件”按钮使用react。

我必须以某种方式从RecentFilesTableView获取所选文件。我还没有看到执行此操作的方法(ofc。我可以将 tableView.dataSource() 强制转换为我的类。但我相信干净的设计不涉及此类强制转换)。

缺点:一类可以统治所有。

解决方案3

由于我无法为RecentTableDelegate 和MasterViewController 创建父类(super class),所以我可以使用Swift 扩展向它们添加打开方法。但这不是很 OOP。

那么苹果世界做此类事情的模式是什么?

最佳答案

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

关于macos - 在 NSViewController 和 NSTableViewDelegate 之间共享方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33816326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com