我正在创建一个非基于文档的应用程序,可以打开和显示各种图像类型。在我的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帖子并遵循这些建议,但没有一个有效。有没有人想知道为什么会发生这种情况?
答案 0 :(得分:0)
一个古老的问题,我知道,但为了以防万一:我在上面注册之后才开始工作,并在Imported Type UTIs
进行了输入:
<key>UTImportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>Decision List</string>
<key>UTTypeIdentifier</key>
<string>com.brightscreentv.document.dlist</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>dlist</string>
</array>
</dict>
</dict>
</array>
我有一个自定义文件类型.dlist
,一旦上面的信息在info.plist中,当用户右键单击该文件并选择{{1}时,我在AppDelegate中收到了对以下方法的调用(无论应用程序是否需要打开)。
Open With