Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 Mac:将信息保存到文件而不修改日期戳_Macos_Cocoa_Save_Document_Datestamp - Fatal编程技术网

Macos Mac:将信息保存到文件而不修改日期戳

Macos Mac:将信息保存到文件而不修改日期戳,macos,cocoa,save,document,datestamp,Macos,Cocoa,Save,Document,Datestamp,Mac OS X人机界面指南在其关于windows的部分中指出: 请注意,如果用户在不进行任何其他更改的情况下打开、移动和关闭文档窗口,则应保存新窗口位置,但不应修改文件的日期戳 我们该怎么做?如果我有一个基于文档的应用程序,并且我想在文件中保存文档的“窗口”位置和大小,而不接触它们的日期戳,我会覆盖dataOfType:error,等等。但是,据我所知,所有这些都会自动修改文件的日期戳 我认为只有一种方法可以做到这一点,这有点像黑客:使用NSFileManager临时保存文件的旧日期戳,保存窗

Mac OS X人机界面指南在其关于windows的部分中指出:

请注意,如果用户在不进行任何其他更改的情况下打开、移动和关闭文档窗口,则应保存新窗口位置,但不应修改文件的日期戳

我们该怎么做?如果我有一个基于文档的应用程序,并且我想在文件中保存文档的“窗口”位置和大小,而不接触它们的日期戳,我会覆盖
dataOfType:error
,等等。但是,据我所知,所有这些都会自动修改文件的日期戳

我认为只有一种方法可以做到这一点,这有点像黑客:使用
NSFileManager
临时保存文件的旧日期戳,保存窗口在文件中的位置,然后使用
setAttributes:ofItemAtPath:error
将其更改回来


有更好的办法吗?当然,如果这是一项常见任务…

如何将窗口位置保存在NSUserDefaults而不是文档中?

如何将窗口位置保存在NSUserDefaults而不是文档中?

谢谢您的回答!但是,据我所知,使用
NSUserDefaults
需要跟踪应用程序中保存的每个文档。每当应用程序启动时,它都需要检查其保存的文件集中的任何文件是否已从系统中删除——实际上,即使这样也可能不起作用,因为它们可能只是在一个可移动磁盘中。因此,也许我遗漏了一些东西,但我认为这是不可行的。这让我很困扰,因为HIG说这应该是一个常见的任务…当然-您可以使用一些唯一的文档ID保存字符串编码的矩形(文档数据中的隐藏UUID属性应该可以)。实际上,我认为最好是(因为这是该机器上特定于用户的(因为其他机器可以有其他屏幕几何图形))将其放入用户默认值中,而不是编写文件和伪造时间戳。苹果的指导方针并不总是最好的方式…:-)考虑这一点:如果将ReCT存储在DOC中,并且ReCt将该文件跟随到具有较小屏幕的新计算机上,则必须确保为较小屏幕调整恢复的RCT,从而在原始计算机上改写一个完全有效的位置。现在,您可以使用另一台计算机的“更正”帧在原始计算机上打开。为什么?为什么不将用户+计算机特定的文档窗口框架存储在该计算机上,以便无论在其他位置打开它都始终有效?这些都是有说服力的观点,但应用程序数据中旧文档记录的累积又如何呢?删除检查不能被认为是理所当然的文档可能位于可移动光盘上,当应用程序扫描其丢失的文档时,该光盘可能恰好被卸载。嗯,也许这是一个值得做出的牺牲……无论如何,谢谢你的回答。这看起来确实是唯一的另一种方式。这是一个艰难的决定,但你对用户默认值中旧文档数据的看法是正确的。如果用户定期创建/打开新文档,默认数据中会有很多内容。如果将它们保存在一个数组中,最早的将是前n个。在应用程序启动时,如果记住的文档超过(比如)10个,则删除第一个计数-10。简单的修复。谢谢你的回答!但是,据我所知,使用
NSUserDefaults
需要跟踪应用程序中保存的每个文档。每当应用程序启动时,它都需要检查其保存的文件集中的任何文件是否已从系统中删除——实际上,即使这样也可能不起作用,因为它们可能只是在一个可移动磁盘中。因此,也许我遗漏了一些东西,但我认为这是不可行的。这让我很困扰,因为HIG说这应该是一个常见的任务…当然-您可以使用一些唯一的文档ID保存字符串编码的矩形(文档数据中的隐藏UUID属性应该可以)。实际上,我认为最好是(因为这是该机器上特定于用户的(因为其他机器可以有其他屏幕几何图形))将其放入用户默认值中,而不是编写文件和伪造时间戳。苹果的指导方针并不总是最好的方式…:-)考虑这一点:如果将ReCT存储在DOC中,并且ReCt将该文件跟随到具有较小屏幕的新计算机上,则必须确保为较小屏幕调整恢复的RCT,从而在原始计算机上改写一个完全有效的位置。现在,您可以使用另一台计算机的“更正”帧在原始计算机上打开。为什么?为什么不将用户+计算机特定的文档窗口框架存储在该计算机上,以便无论在其他位置打开它都始终有效?这些都是有说服力的观点,但应用程序数据中旧文档记录的累积又如何呢?删除检查不能被认为是理所当然的文档可能位于可移动光盘上,当应用程序扫描其丢失的文档时,该光盘可能恰好被卸载。嗯,也许这是一个值得做出的牺牲……无论如何,谢谢你的回答。这看起来确实是唯一的另一种方式。这是一个艰难的决定,但你对用户默认值中旧文档数据的看法是正确的。如果用户定期创建/打开新文档,默认数据中会有很多内容。如果将它们保存在一个数组中,最早的将是前n个。在应用程序启动时,如果记住的文档超过(比如)10个,则删除第一个计数-10。简单的修复。