gpt4 book ai didi

objective-c - Cocoa 应用程序通过双击或右键单击打开文件

转载 作者:可可西里 更新时间:2023-10-31 23:35:52 25 4
gpt4 key购买 nike

我正在创建一个可以打开和显示各种图像类型的非基于文档的应用程序。在我的 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 帖子并遵循了这些建议,但没有一个有效。有没有人知道为什么会发生这种情况?

最佳答案

一个老问题,我知道,但以防万一:我只是在按照你上面的方式注册并在 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 中时,当用户右键单击该文件时,我在 AppDelegate 中收到了对以下方法的调用,选择Open With(不管应用是否需要打开)。

func application(_ sender: NSApplication, openFiles filenames: [String]) {
if let window = NSApp.mainWindow, let vc = window.contentViewController as? ViewController {
vc.openThese(files: filenames)
}
}

关于objective-c - Cocoa 应用程序通过双击或右键单击打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38272650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com