macos - 为什么不是应用程序 :openFile: called when the application is already running?

标签 macos launch appkit nsapplication-delegate

当用户双击由我的应用程序创建的文件或将此类文件拖到停靠栏图标上时,我想处理打开事件。

因此,我实现了 NSApplicationDelegate application:openFile: application:openFiles: 方法,在应用程序未运行时按预期工作。

但是,如果在 open 事件发生时应用程序已经在运行,则应用程序将成为焦点,但永远不会调用上述方法(不会命中其中的断点)并且不会打开文件。

我也尝试实现 application:openURLs: .此方法具有相同的行为:如果事件发生时应用程序已经在运行,则不会调用它。

当应用程序已经运行时,我是否需要实现不同的函数来处理打开的文件,或者我需要做/设置其他什么以便在这些情况下调用现有函数?

最佳答案

这在the documentation中没有提到,但是 according to this answer的方式application:openFile:作品是它NSApplication转发 odoc Apple Events 给其代表。

有了这些知识,我能够在应用程序中找到以下旧的 Carbon 调用:

osError = AEInstallEventHandler(kCoreEventClass,
                                kAEOpenDocuments,
                                g_OpenDocumentsUPP,
                                0L,
                                false);

我假设这个现有的事件处理程序在 NSApplication 之前消耗了 Apple 事件有机会处理它。但是,当应用程序尚未运行时,NSApplication在调用上面设置事件处理程序的行之前处理事件,因此行为不同。

从构建中删除此旧代码导致 NSApplicationDelegate要调用的方法,从而解决问题。

关于macos - 为什么不是应用程序 :openFile: called when the application is already running?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50996326/

相关文章:

macos - 如何从 Delphi 调用 NSBeep

macos - 如何使用 SwiftUI 构建 AppKit TableView ?

python - 如何使用 Python 3 在 Mac 上安装 pyaudio?

macos - 在 OSX 上安装 Git HTML 帮助

ipad - 启动纵向时,UISplitViewController 不显示弹出按钮

c++ - 是否有非 Java 的跨平台方式来启动特定文件类型的关联应用程序?

安卓开发 : How To Add App To The Application Chooser?

objective-c - 在基于 View 的 NSTableView 上正确调整行的大小

objective-c - 我必须使用哪个 Objective-C 框架来录制屏幕?

php - OSX本地环境中的Symfony2权限问题