如何使我的macOS应用程序能够打开PDF文件?

时间:2019-05-15 22:40:05

标签: swift pdf cocoa uti open-with

(请参阅下面的EDIT2)

我在Swift 5中编写了一个macOS,除其他功能外,它还可以显示pdf文件。 现在,我希望能够通过下拉菜单打开pdf文件 打开方式->其他...-> MyApp 但是,当我选择一个PDF文件时,会出现一个错误消息框:

The document "my document.pdf" could not be opened. 
MyApp cannot open files in the "PDF" format.

因此,我尝试在AppDelegate中添加以下方法

func application(_ sender: NSApplication, openFile filename: String) -> Bool {
    Swift.print("\(filename)")
    return true
}

并注册文档类型和导入的UTI(参见图)。我仍然收到相同的错误消息。我在做什么错了?

PS。声明文档类型和导入的UTI可能是多余的,但是我正在尝试一切。

enter image description here

编辑:我进步了一点。 清理并重建项目使MyApp出现在Finder的“打开方式”下拉菜单中,但仍然出现相同的错误消息。 要调用错误,我也可以使用终端命令

open -a /path/to/MyApp.app /path/to/a.pdf

我通过将名称或自变量中包含 open 的所有方法添加到AppDelegate中来进行了蛮力尝试,但是这些方法从未调用过,并且仍然出现相同的错误。 即,方法是:

func application(_ sender: NSApplication, openFile filename: String) -> Bool {
    Swift.print("\(filename)")
    return true
}

func application(_ application: NSApplication, open urls: [URL]) {
    Swift.print("\(urls)")
}

func applicationOpenUntitledFile(_ sender: NSApplication) -> Bool {
    return true
}

func application(_ sender: NSApplication, openFiles filenames: [String]) {
    Swift.print("\(filenames)")
}

func application(_ sender: Any, openFileWithoutUI filename: String) -> Bool {
    Swift.print("\(filename)")
    return true
}

func application(_ sender: NSApplication, openTempFile filename: String) -> Bool {
    Swift.print("\(filename)")
    return true
}

func applicationShouldOpenUntitledFile(_ sender: NSApplication) -> Bool {
    return true
}

EDIT2 : 我创建了一个新项目,即使不指定文档类型,上述代码也可以运行,并且此方法称为:

func application(_ application: NSApplication, open urls: [URL])

因此,我的项目中必须有一个设置或一段代码,以防止发生正确的行为。你有什么可能的想法吗?

0 个答案:

没有答案