我正在创建一款非文档类应用程序,可以打开和显示各种图像类型。在我的 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:]
阅读文档后,它指出如果用户双击文件,则调用顺序应为:
- [AppDelegate applicationWillFinishLaunching:]
- [AppDelegate application:openFile(s):]
- [AppDelegate applicationDidFinishLaunching:]
然而,打开文件的方法从未被调用。
我已经阅读了许多其他stackoverflow帖子,并遵循了那些建议,但它们都没有起作用。有人有任何想法为什么会发生这种情况吗?