如何将文件名从finder传递到我的OS X应用程序中

时间:2014-04-09 04:00:22

标签: xcode macos cocoa

我希望能够使用finder中的应用程序打开文件

单击该文件,然后选择打开,然后选择我的应用程序。

我没有使用NSDocumentController,我把它放在我的applicationdelegate

-(BOOL) application:(NSApplication *)sender openFile:(NSString *)filename;

因为我或多或少地猜测我的方式,任何人都可以告诉我,我是否在正确的轨道上

还有一些我需要做的事情,以告诉操作系统我可以使用的文件之王

关心基督徒

3 个答案:

答案 0 :(得分:1)

  1. 您必须注册与您的程序相关联的文件类型,您可以通过添加" LSItemContentTypes" plist的键,并指定文件类型。
  2. 类似于这篇文章中描述的内容。 How do I associate file types with an iPhone application?

    1. 当用户打开文件时,将调用委托方法。
    2. -(BOOL) application:(NSApplication *)sender openFile:(NSString *)filename;

      1. 文件名参数将与路径一起使用,然后您可以使用该文件处理文件。

答案 1 :(得分:1)

您还需要在Info.plist文件中指定启动服务密钥。

来自:Launch Services Programming

  

CFBundleTypeName键指定文档类型的种类字符串,用户可见的描述用于在屏幕上表征此类文档(例如在Finder的“获取信息”窗口或Finder列表视图的“种类”列中)。可以通过将此密钥包含在相应.lproj子目录的InfoPlist.strings文件中来对其进行本地化。 CFBundleTypeIconFile标识包含用于在屏幕上显示此类文档的图标图像的文件。 LSTypeIsPackage指定文档是打包的包(true)还是单个文件(false)。

     

属于给定文档类型的文件可以通过其文件类型,文件扩展名或MIME类型来表征。类型定义字典中的CFBundleTypeOSTypes键指定一个四字符文件类型代码的数组,用于表征此类文档;类似地,CFBundleTypeExtensions指定文件扩展名数组,CFBundleTypeMIMETypes指定MIME类型数组。如果相应的文件特征不相关,则可以省略这些单独的密钥中的任何一个,但是为了使文件类型非空,它们中的至少一个必须存在。要允许应用程序在拖放操作期间接受不受限制的文件类型或扩展名的文件,您可以对CFBundleOSTypes或CFBundleTypeExtensions使用特殊的通配符值“ * *”或“*”,分别。 (这些仅在拖放操作中受到尊重,而不是在用户通过双击打开文档时。)最后,CFBundleTypeRole键指定应用程序声明的与给定类型的文档相关的角色,如下所述“应用角色。”

以下是rtf文件的 TextEdit.app 示例:

<key>CFBundleDocumentTypes</key>
    <array>
            <dict>
                    <key>CFBundleTypeIconFile</key>
                    <string>rtf.icns</string>
                    <key>CFBundleTypeName</key>
                    <string>NSRTFPboardType</string>
                    <key>CFBundleTypeRole</key>
                    <string>Editor</string>
                    <key>LSIsAppleDefaultForType</key>
                    <true/>
                    <key>LSItemContentTypes</key>
                    <array>
                            <string>public.rtf</string>
                    </array>
                    <key>NSDocumentClass</key>
                    <string>Document</string>
                    <key>NSIsRelatedItemType</key>
                    <true/>
            </dict>
</array>

答案 2 :(得分:0)

感谢所有的一件事,我发现在applicationdidfinishlaunching之前会打开文件 我正在创建包含文件打开方法的视图控制器

干杯基督徒安德森