代码之家  ›  专栏  ›  技术社区  ›  Rich

为什么在应用程序已经运行时不调用application:openfile:

  •  1
  • Rich  · 技术社区  · 7 年前

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

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

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

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

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

    2 回复  |  直到 7 年前
        1
  •  2
  •   Rich    7 年前

    这在 the documentation ,但是 according to this answer 就这样 application:openFile: 工作就是这样 NSApplication 向前 odoc 苹果向其代表提供活动。

    有了这些知识,我可以在应用程序中找到以下旧的Carbon电话:

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

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

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

        2
  •  -1
  •   MyCometG3    7 年前

    以下方法有效吗?

    - (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.