【问题标题】:Dropping Files onto Dock Icon in Cocoa将文件拖放到 Cocoa 中的 Dock 图标上
【发布时间】:2011-01-30 04:53:29
【问题描述】:

如何将 Info.plist 中指定类型的文件(或选择在 Finder 中打开)拖放到我的停靠图标上,然后使用文件的完整路径调用方法?

【问题讨论】:

  • 我不明白这个问题。用户是在将文件拖到您的 Dock 图标上,还是您想以编程方式打开文件?
  • 我的意思是实际获取拖放到停靠图标上的文件的路径。

标签: cocoa file drag-and-drop dock


【解决方案1】:

如果你已经正确设置了 Info.plist 的 CFBundleDocumentTypes 数组(“LSItemContentTypes”或“CFBundleTypeExtensions”),那么你只需要设置一个 NSApplication 委托并实现委托方法,application:openFile:

如果您希望一次删除多个文件,请实现 application:openFiles:

对于承诺的文件 (NSFilesPromisePboardType/kPasteboardTypeFileURLPromise),请参阅 Dropping promised files on to application icon in Dock

【讨论】:

  • 我已经正确设置了我的 CFBundleDocumentTypes 数组,并编写了方法,但是停靠图标根本不接受我的文件。
  • Tristian Seifert:这个问题的一个可能原因是您在 plist 中指定了一个 UTI,但它是错误的:boredzo.org/blog/archives/2007-07-23/… 您还应该确保导入您在列表:developer.apple.com/mac/library/documentation/FileManagement/…
  • 看了这两个文档后,我还是不太明白如何将UTI添加到我现有的PList中。这是我的 Info.plist 的一小部分: CFBundleTypeIconFileDraft.icnsCFBundleTypeExtensionspodraftCFBundleTypeName邮局草稿我必须在这个定义中添加什么才能让扩展坞接受文件?
  • 在我制作发布版本并将应用程序放在 Applications 文件夹之前,这对我不起作用。之后,它也开始在 XCode 中构建和运行调试版本。
  • 无论我做什么,我都无法让停靠图标接受拖放。
【解决方案2】:

这是 Xcode 5 的更新解决方案。 在 AppDelegate.m 中

-(BOOL)application:(NSApplication *)sender openFile:(NSString *)filename
{
    NSLog(@"%@", filename);
    return YES;
}

并且在 Xcode 中的 Project > Targets > Info 下设置 Document Types:

检查 Info.plist 中的设置,以防您有一个空的“文档内容类型 UTI”数组,应正确填写或删除该数组。

您的 Info.plist 应如下所示:

【讨论】:

  • 请注意,这将使您的应用程序接受 any 文件,而不仅仅是给定的扩展名,因为 CFBundleTypeExtensions 设置为 *。如果您只支持某些文件扩展名,请在此处指定它们。否则,操作系统将提供使用您的应用程序打开随机文件,只是让您的应用程序失败。
【解决方案3】:

在当前系统上,您可以使用 UTI 代替旧式的四字符类型(例如上面的 fold)。在 Xcode 的文档类型编辑器中,使用以下命令创建一个新类型:

  • 名称:文件夹
  • 标识符:public.folder

public.folderpublic.directory 的子类型。 public.folder 匹配对用户显示的目录,即不匹配 .app 包装器之类的包。

【讨论】:

    【解决方案4】:

    在侧窗格的目标组中选择您的应用程序并使用获取信息。然后在新窗口中选择属性选项卡以添加新的文档类型。为方便起见将其命名为“文件夹”,操作系统类型需要为“折叠”;您可以保持原样的商店类型和角色。

    【讨论】:

      【解决方案5】:

      如果您实际上是在制作基于文档的应用程序,那么将其设置为提供路径将使您完成的工作远远超出您的需要。只需使用基于文档的应用程序模板。文档控制器将为您创建正确类的实例;你只需要写那个类。

      您以这种方式创建的应用程序将免费处理文件丢失(通过将它们作为文档打开)。

      【讨论】:

      • 它不是一个基于文档的应用程序,它是一个电子邮件阅读器,我希望能够将草稿、邮箱等拖到我的停靠图标上。
      猜你喜欢
      • 1970-01-01
      • 2011-03-10
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      相关资源
      最近更新 更多