【发布时间】:2019-08-04 11:26:54
【问题描述】:
我实现了NSApplicationDelegate 方法func application(_ sender: NSApplication, openFile filename: String) -> Bool 来获取双击以启动我的macOS 应用程序(Swift 4.x)的文件的名称。然而,这个方法似乎是在ViewController viewDidLoad() 之后调用的,这是我所有初始化代码发生的地方。有没有办法在ViewController 类中获取viewDidLoad() 中的文件名,以便我可以直接在我的初始化代码中使用该文件名?
更新:
我现在可以根据此链接对 Swift 4.2 的建议将数据从 AppDelegate 传递到 ViewController:
所以我的问题仍然是如何直接在ViewDidLoad() 中获取文件名,或者能够通过application(_, sender: NSApplication, openFile filename: String) -> Bool 获取名称,并在调用ViewDidLoad() 时将其传递给ViewController。
【问题讨论】:
-
您的 viewController 有一个神奇的属性,称为代表对象(MVC 编程模式)。使您的代码依赖于该属性的 settter(刷新 UI 等),并且在将数据传递给视图控制器时不要忘记使用它(ps:如果您不喜欢这个属性,您可以使用自己的属性) 启动时显示)。
-
还要确保您的视图控制器不知道文件名是什么。这种逻辑应该在其他地方。您的 NSViewController 即将在屏幕上显示对象。否则你将拥有 MVC(大规模视图控制器)
-
在应用运行时双击另一个文件会怎样?
-
理想情况下,我想使用其他文件启动应用程序的单独进程。
-
单独的过程 -> 你应该改用基于文档的应用程序。它很好地记录了如何/何时加载文档并带有大量示例。否则你必须手动做很多代码。
标签: swift macos cocoa nsviewcontroller nsapplication-delegate