首页 > 解决方案 > 如何为 QuickTime Player 等基于文档的应用程序实现中间文件类型?

问题描述

这里有没有人有使用 macOS 上基于文档的应用程序的经验,您可以在其中创建用户无法通过应用程序保存的文档文件类型?具有禁用名称和位置字段的重命名/移动下拉列表?

想先从这个问题开始,然后再解释下面的场景。

我正在尝试为基于文档的应用程序实现中间文件类型。可以把它想象成一个描述媒体编辑/组合的中间项目文件,但如果用户试图关闭窗口,他们将被提示将媒体导出为最终格式(不是中间类型)。

我正在尝试将体验建立在 QuickTime Player 的基础上。在 QuickTime Player 中,如果您打开一个视频,它就像一个查看器,它允许您通过单击标题的下拉菜单重命名/移动文件:

https://i.stack.imgur.com/a5WGr.png [屏幕截图显示来自 QuickTime Player 的重命名/移动下拉菜单]

注意:发现有趣的是,由于某种原因,“锁定”选项被禁用。当我在我的文件中打开文件时,情况并非如此。

现在,当您在 QuickTime 中将另一个视频拖到该视频上时,您创建了这两个视频的合成,并且窗口变为标记为已编辑的无标题文档。这似乎是通过他们使用扩展名 qtpxcomposition 创建的新文档文件类型来完成的。查看 QuickTime Player App 的 plist 显示它们在标识符 com.apple.quicktimeplayerx-composition 和 com.apple.quicktimeplayerx-composition-bundle 下具有两种类型的 QuickTime Player Composition,共享相同的扩展名。它还显示 QuickTime Player App 被设置为这些类型的编辑器。我理解并以相同的方式使用不同的扩展实现了我自己的导出 UTI。我什至在创建该类型的临时文件、打开包含其内容的文档并让它替换当前窗口的情况下都可以正常工作。但是,我发现最大的不同是我的重命名/移动下拉菜单完全启用,这意味着用户可以保存我的中间文件。在 QuickTime Player 上,您可以在此处看到情况并非如此:

https://i.stack.imgur.com/yrCab.png [屏幕截图显示 QuickTime Player 中 qtpxcomposition 文件的重命名/移动下拉菜单]

名称、位置和锁定选项都被禁用。用户只能添加到标签中,因此当打开此重命名/移动下拉菜单时,标签下拉菜单会自动打开。我一直无法弄清楚这是如何完成的。由于它是从文件内容加载的无标题文档,因此如果您右键单击标题(我的标题也是如此),它没有路径,并且您无法重命名/移动它,因为这些选项被禁用. 您会发现文件菜单下的“保存”、“重命名”和“移动到”选项都被禁用,如果您关闭窗口,则会出现一个保存对话框,该对话框会将合成导出为 .mov 文件,如下所示:https ://i.stack.imgur.com/bf5w9.png. 这意味着该应用程序有效地隐藏了用户保存此中间文件的任何真实方式。有谁知道他们是怎么做到的?

根据我的测试,似乎只有在您返回 YES 时才会出现下拉菜单+ (BOOL)autosavesInPlace ,这也是导致在您尝试关闭无标题文档的窗口时出现保存提示的原因。虽然我知道 QuickTime Player 正在为要保存的自动保存设置一个特定位置。即在 /Users/.../Library/Containers/com.apple.QuickTimePlayerX/Data/Library/Autosave 信息中。我仍然需要弄清楚如何正确地将自动保存设置到这样的位置(我的猜测是 via NSURL * autosavedContentsFileURL),但我不怀疑这与名称和位置字段被禁用的原因有关。

我尝试过的事情包括从 中返回错误,测试从or中checkAutosavingSafetyAndReturnError返回 YES 或 NO 的内容 ,以及测试锁定文档的想法。然而,这些都没有奏效。其中最重要的是让文件似乎被标记为“锁定”,但用户可以打开该重命名/移动下拉菜单并解锁它。鉴于该文件未在 QuickTime Player 上标记为锁定,我认为锁定它也不是其中的一部分。preservesVersionsautosavesDrafts

我能想到的另一种方法是他们正在访问下拉列表本身并禁用这些文本字段,但我还没有找到任何方法来访问该下拉列表。还没有找到任何可以给我的委托方法或可覆盖的方法。我发现的最接近的东西是在 NSWindow 中,您可以在其中覆盖- (BOOL)window:(NSWindow *)window shouldPopUpDocumentPathMenu:(NSMenu *)menu,但那个只是指右键单击标题时出现的路径弹出窗口。对于像这样的无标题文档,它已经没有任何作用。

我不确定此时我还能尝试什么,而且我没有任何运气找到其他人在网上询问这种事情。唯一的答案我看到有人在制作该按钮时禁用该下拉菜单返回 nil ,但这不起作用。虽然标题右侧的人字形消失了,但如果您单击标题,它并不会阻止功能仍然发生。

有谁知道这是如何在 QuickTime Player 中完成的?

标签: macoscocoansdocumentdocument-based

解决方案


推荐阅读