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

发布于 2024-09-06 05:34:50 字数 892 浏览 9 评论 0原文

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

当我放下时,应用程序会正确启动,但是,然后我会收到一个对话框:

无法打开文档“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>

谢谢。

I've got an app, written in Obj-C. The info.plist has a list of file types that the app can open. I'm pretty sure that this is working because when I try to drag a file of an unacceptable type, the app doesn't highlight, but when I drag a file of an acceptable type, it does highlight, and lets me drop.

When I drop, the app starts up, correctly, however, then I get a dialog saying:

The document "foo.tiff" could not be opened. DocView cannot open files in the "TIFF File" format.

I DO have this in my 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>

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

弱骨蛰伏 2024-09-13 05:34:50

您的应用程序实际上处理文件打开吗?

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

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

Does your app actually handle the file opening?

If it's an NSDocument application, you need to implement one of the file reading methods such as readFromData:ofType:error:. In an ordinary NSApplication your app delegate should handle it in application:openFile:. In both cases you need to return YES to acknowledge that you've successfully opened the file.

If you have implemented this, is the message being sent?

那伤。 2024-09-13 05:34:50

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

其次,在 LSHandlerRank 下有 Documents/,它不是合法值,Documents 也不是。

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

First, the part of the Info.plist that you show is within the CFBundleDocumentTypes array, not at the top level of the Info.plist, right?

Second, under LSHandlerRank you have Documents/, which is not a legal value, nor is Documents.

Third, you probably need to add NSDocumentClass.

埋情葬爱 2024-09-13 05:34:50

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

我也怀疑,但尚未证明文档继承的类和任何类都需要是 Public 或 Open。

Just another thing that sometimes gets me is that you need to include $(PRODUCT_MODULE_NAME). before your class name. If you use the pulldown menu in 10.2.1 in a Swift project Xcode doesn't seem to put a fully qualified name for your class in that field. In prior versions it did.

I also suspect, but haven't proven that the class and any classes the document inherits need to be Public or Open.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文