Macos 为什么应用程序已经在运行时没有调用application:openFile:?

Macos 为什么应用程序已经在运行时没有调用application:openFile:?,macos,launch,appkit,nsapplication-delegate,Macos,Launch,Appkit,Nsapplication Delegate,我希望在用户双击我的应用程序创建的文件或将此类文件拖到dock图标上时处理打开事件 因此,我实现了NapplicationElegate的和方法,当应用程序未运行时,它们会按预期工作 但是,如果在打开事件发生时应用程序已在运行,则应用程序将成为焦点,但不会调用上述方法,因为不会命中其中的断点,并且不会打开文件 我也试着实施。此方法具有相同的行为:如果事件发生时应用程序已在运行,则不会调用此方法 当应用程序已经运行时,我是否需要实现不同的函数来处理打开的文件,或者是否需要执行/设置其他操作,以便在

我希望在用户双击我的应用程序创建的文件或将此类文件拖到dock图标上时处理打开事件

因此,我实现了NapplicationElegate的和方法,当应用程序未运行时,它们会按预期工作

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

我也试着实施。此方法具有相同的行为:如果事件发生时应用程序已在运行,则不会调用此方法


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

以下方法有效吗

- (void)application:(NSApplication *)application 
       openURLs:(NSArray<NSURL *> *)urls;

If your delegate implements this method, AppKit does not call the
application:openFile: or application:openFiles: methods.
中没有提到这一点,但application:openFile:的工作方式是它将odoc Apple事件转发给它的委托

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

osError = AEInstallEventHandler(kCoreEventClass,
                                kAEOpenDocuments,
                                g_OpenDocumentsUPP,
                                0L,
                                false);
我假设现有的事件处理程序在NSApplication有机会处理Apple事件之前就已经处理了它。但是,当应用程序尚未运行时,NSApplication会在调用上面设置事件处理程序的行之前处理事件,因此会出现不同的行为


从生成中删除此旧代码导致调用了NSApplicationedLegate方法,从而解决了问题。

应用程序文档基于吗?@Willeke不是。如何在新项目中重现此问题?我尝试了此方法,效果良好。@Willeke因此我使用了正确的API,但在我的项目中,还有一些其他设置/代码阻止它在应用程序已经运行时工作。感谢您提供的信息。应用程序:OpenURL:具有相同的行为:当应用程序未运行时,它可以正常工作,但当应用程序已运行时,它不会被调用。