创建可以打开给定格式的文件的应用程序

时间:2010-06-15 15:23:28

标签: objective-c macos plist file-type

我有一个用Obj-C编写的应用程序。 info.plist包含应用程序可以打开的文件类型列表。我很确定这是有效的,因为当我尝试拖动一个不可接受类型的文件时,应用程序不会突出显示,但是当我拖动一个可接受类型的文件时,它会突出显示,然后让我放弃。 / p>

当我放弃时,应用程序正确地启动,然后我得到一个对话框说:

无法打开文档“foo.tiff”。 DocView无法以“TIFF文件”格式打开文件。

我在info.plist

中有这个
<key>CFBundleTypeExtensions</key>
<array>
   <string>tif</string>
   <string>tiff</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>TIFFFile.icns</string>
<key>CFBundleTypeName</key>
<string>TIFF File</string>
<key>CFBundleTypeOSTypes</key>
<array>
   <string>TIFF</string>
</array>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Documents/</string>

感谢。

3 个答案:

答案 0 :(得分:4)

您的应用实际上是否处理文件打开?

如果是NSDocument应用程序,则需要实现其中一种文件读取方法,例如readFromData:ofType:error:。在普通的NSApplication中,您的应用委托应该在application:openFile:中处理它。在这两种情况下,您都需要返回YES以确认您已成功打开该文件。

如果您已实现此功能,是否正在发送消息?

答案 1 :(得分:1)

首先,您显示的Info.plist部分位于CFBundleDocumentTypes数组中,而不是位于Info.plist的顶层,对吧?

其次,在LSHandlerRank下你有Documents /,这不是合法的价值,也不是文件。

第三,您可能需要添加NSDocumentClass。

答案 2 :(得分:0)

有时让我感到困惑的另一件事是,您需要包括$(PRODUCT_MODULE_NAME)。在您的班级名称之前。如果您在Swift项目的10.2.1中使用下拉菜单,则Xcode似乎不会在该字段中为您的类添加全限定名。在以前的版本中确实如此。

我也怀疑,但是还没有证明该类和文档继承的任何类都必须是Public或Open。​​