当用户双击由我的应用程序创建的文件或将此类文件拖到停靠栏图标上时,我想处理打开事件。
因此,我实现了 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/