【发布时间】:2018-06-12 19:54:55
【问题描述】:
我的想法是我有一个需要打开的文件模板,但它应该表现得好像只打开了文件的内容而不是文件本身。
用户的不同之处应该是,他需要选择一个位置来保存文件,而不是仅仅覆盖打开的文件。
在预览应用中可以看到类似的行为。复制功能时,预览将在新窗口中打开相同的文件。保存文件后,用户需要指定保存位置。
据我所知NSWorkspace 不支持开箱即用的这种行为。有人知道解决方法吗?我会很感激的!
编辑
在我的情况下,我不知道用户在完成文件后要将文件保存到哪里。目前我只是将文件复制到用户主目录中的隐藏文件夹,然后打开副本,以免覆盖原始文件。
产生的行为是: - 用户看不到文件所在的位置 - 保存并关闭应用程序后,用户将无法再找到该文件。
解决方法:我想现在我会在打开它之前询问用户她想将它保存在哪里,这对我来说似乎有点多余,因为它很可能是她不想要的保存它。希望我能尽快找到更好的解决方案。
【问题讨论】:
-
您想在自己的应用中打开这样一个新文档吗?还是在其他应用程序中?是否会在您的应用中启动打开操作?或其他?值得一提的是,该操作系统内置了对您所描述的内容的支持。在 Finder 中查看文件的“获取信息”窗口中的“文具垫”复选框。
-
@KenThomases 我的应用程序正在调用 NSWorkspace.shared.openFile(..) 并带有一个 url 和一个适当的应用程序来打开该 url。所以你的答案正是我需要的。我很困惑,经过十多年的编程和使用 macOS,我从来没有注意到也没有读过这个文具垫功能。 :D
-
这是经典 Mac OS 时代的一项古老功能。我没有找到任何用于将文件标记为文具本的现代 API。据推测,仍然可以使用文件管理器 API 在文件的 Finder 标志中设置相关位。此外,您知道,当文具便笺簿文件打开时,系统所做的所有事情就是制作一个副本并打开该副本。你也可以这样做。请注意,应用程序不需要用户在保存时指定位置,因为应用程序已经将文档与现有文件(自动副本)相关联。
-
起初这听起来很有希望,但它确实不像我最初预期的那样工作。我已经在复制文件,所以@KenThomases 是对的,没有太大区别。然而值得注意的是,固定垫标志仅影响用户与文件的直接交互,例如通过 Finder。但是当调用 NSWorkspace 打开文件时,该标志将被忽略。所以这不是我的问题的解决方案,但仍然 - 通过 Apple Script 设置标志在这里描述:apple.stackexchange.com/questions/39490/…
-
您是否尝试在特定的已知应用程序中打开新文档?也许它可以编写脚本或提供您可以调用的服务。
标签: macos cocoa nsfilemanager nsworkspace