【发布时间】:2016-07-08 17:47:09
【问题描述】:
我正在创建一个基于非文档的应用程序,它可以打开和显示各种图像类型。在我的 Info.plist 中,我添加了支持的文件类型及其标识符(public.png、public.jpeg、public.tiff 等)。在我的 AppDelegate 中,我实现了 -[application:openFile:] 方法(以及 -[application:openFiles:] 方法)。
这是我的 Info.plist 的示例:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSItemContentTypes</key>
<array>
<string>public.png</string>
</array>
</dict>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSItemContentTypes</key>
<array>
<string>public.jpeg</string>
</array>
</dict>
...
</array>
当我右键单击 PNG 并选择我的应用程序时,我的应用程序会打开,但不会调用 -[application:openFile:] 方法和 -[application:openFiles:] 方法。如果在我的应用程序打开后,我右键单击该文件并再次单击我的应用程序,则会调用 -[application:openFiles:] 方法并且一切正常。
我试过只实现-[application:openFile:] 方法,一切都和以前一样。仅实现 -[application:openFiles:] 方法时相同。当我同时实现 -[application:openFiles:] 方法时优先。
我添加了日志记录以查看我的应用在启动时是如何初始化的。当我的应用未打开并且我右键单击 PNG 图像时,我的应用的方法按以下顺序调用:
- [ViewController viewDidLoad]
- [AppDelegate applicationWillFinishLaunching:]
- [AppDelegate applicationDidFinishLaunching:]
打开我的应用后,再次右键单击图像会产生以下方法调用:
- [AppDelegate application:openFiles:]
阅读documentation后,它说如果用户双击一个文件,调用顺序应该是:
- [AppDelegate applicationWillFinishLaunching:]
- [AppDelegate application:openFile(s):]
- [AppDelegate applicationDidFinishLaunching:]
然而打开文件方法永远不会被调用。
我已经阅读了一堆其他 stackoverflow 帖子并遵循了这些建议,但没有一个有效。有没有人知道为什么会发生这种情况?
【问题讨论】:
标签: objective-c swift macos cocoa