【问题标题】:Get name of file that launched an app in ViewController class?获取在 ViewController 类中启动应用程序的文件名?
【发布时间】: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

https://stackoverflow.com/questions/15049924/passing-data-from-app-delegate-to-view-controllerhttps://stackoverflow.com/questions/15049924/passing-data-from-app-delegate-to-view-controller

所以我的问题仍然是如何直接在ViewDidLoad() 中获取文件名,或者能够通过application(_, sender: NSApplication, openFile filename: String) -> Bool 获取名称,并在调用ViewDidLoad() 时将其传递给ViewController

【问题讨论】:

  • 您的 viewController 有一个神奇的属性,称为代表对象(MVC 编程模式)。使您的代码依赖于该属性的 settter(刷新 UI 等),并且在将数据传递给视图控制器时不要忘记使用它(ps:如果您不喜欢这个属性,您可以使用自己的属性) 启动时显示)。
  • 还要确保您的视图控制器不知道文件名是什么。这种逻辑应该在其他地方。您的 NSViewController 即将在屏幕上显示对象。否则你将拥有 MVC(大规模视图控制器)
  • 在应用运行时双击另一个文件会怎样?
  • 理想情况下,我想使用其他文件启动应用程序的单独进程。
  • 单独的过程 -> 你应该改用基于文档的应用程序。它很好地记录了如何/何时加载文档并带有大量示例。否则你必须手动做很多代码。

标签: swift macos cocoa nsviewcontroller nsapplication-delegate


【解决方案1】:

解决了我的问题。我没有在ViewController 中执行我的初始化代码,而是在AppDelegate applicationDidFinishLaunching 中实现了代码,以便可以在启动应用程序时和第一个事件发生之前执行初始化。我相信这是AppDelegate 处理应用程序初始化的更合适的做法。本次代码调整既解决了ViewControllerAppDelegate之间传递数据的需求,也解决了application(_, sender: NSApplication, openFile filename: String) -> BoolViewDidLoad()之后调用的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多