我有一个用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>
感谢。
答案 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。