Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何为基于文档的应用程序(如QuickTime Player)实现中间文件类型?_Macos_Cocoa_Nsdocument_Document Based - Fatal编程技术网

Macos 如何为基于文档的应用程序(如QuickTime Player)实现中间文件类型?

Macos 如何为基于文档的应用程序(如QuickTime Player)实现中间文件类型?,macos,cocoa,nsdocument,document-based,Macos,Cocoa,Nsdocument,Document Based,这里有没有人有在macOS上使用基于文档的应用程序的经验,在这些应用程序中,您可以创建用户无法通过应用程序保存的文档文件类型?是否在“重命名/移动”下拉列表中禁用了名称和位置字段 在对下面的场景进行解释之前,我想先从这个问题开始 我正在尝试为基于文档的应用程序实现一种中间文件类型。将其视为描述媒体编辑/组合的中间项目文件,但如果用户尝试关闭窗口,则会提示他们将媒体导出为最终格式(而不是中间类型) 我试图根据QuickTime玩家的表现来总结经验。在QuickTime Player中,如果您打开一

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

在对下面的场景进行解释之前,我想先从这个问题开始

我正在尝试为基于文档的应用程序实现一种中间文件类型。将其视为描述媒体编辑/组合的中间项目文件,但如果用户尝试关闭窗口,则会提示他们将媒体导出为最终格式(而不是中间类型)

我试图根据QuickTime玩家的表现来总结经验。在QuickTime Player中,如果您打开一个视频,它就像一个查看器,您可以通过单击标题的下拉菜单重命名/移动文件:

[显示QuickTime Player中重命名/移动下拉列表的屏幕截图]

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

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

[显示QuickTime Player中qtpxcomposition文件重命名/移动下拉列表的屏幕截图]

名称、位置和锁定选项均已禁用。用户只能添加到标记中,因此,打开此重命名/移动下拉列表时,标记下拉列表将自动打开。我还不知道这是怎么做到的。由于它是从文件内容加载的无标题文档,因此如果右键单击标题,它没有路径(我的标题也有相同的路径),并且您无法重命名/移动它,因为这些选项在其上被禁用。您会发现“文件”菜单下的“保存”、“重命名”和“移动到”选项都已禁用,如果关闭窗口,将出现一个保存对话框,将合成导出为.mov文件,如下所示:。这意味着应用程序有效地隐藏了用户保存此中间文件的任何实际方式。有人知道他们是怎么做到的吗

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

我尝试过的事情包括从
checkAutosavingSafetyAndReturnError
返回错误,测试从
preservesVersions
AutosavedRafts
返回是或否的功能,以及测试锁定文档的想法。然而,这些都不起作用。其中最常见的一种方法是将文件标记为“锁定”,但用户只需打开“重命名/移动”下拉列表并解锁即可。鉴于文件没有在QuickTime Player上标记为locked,我也不认为这样锁定它是其中的一部分

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

我不确定在这一点上我还能尝试什么,而且我还没有在网上找到其他人询问这类事情。我看到有人给出的禁用下拉列表的唯一答案是,当按钮被按下时,返回零,但这不起作用。虽然标题右侧的V形符号消失了,但如果您单击标题,它不会阻止功能继续发生

有人知道QuickTime Player是如何做到这一点的吗