【问题标题】:Mac: Saving information to file without modifying date stampMac:将信息保存到文件而不修改日期戳
【发布时间】:2011-12-13 11:22:47
【问题描述】:

Mac OS X 人机界面指南在其关于窗口的部分中说:

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

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

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

有没有更好的方法?当然,如果这是一项普通任务...

【问题讨论】:

    标签: macos cocoa save document datestamp


    【解决方案1】:

    将窗口的位置保存在 NSUserDefaults 中而不是文档中怎么样?

    【讨论】:

    • 感谢您的回答!但是,据我所知,使用NSUserDefaults 将涉及必须跟踪曾经保存在应用程序中的每个文档。每当应用程序启动时,它都需要检查其保存的文件集中的任何文件是否已从系统中删除——实际上即使这样也可能不起作用,因为它们可能只是在可移动磁盘中。所以也许我错过了一些东西但我认为这是不可行的。这让我很困扰,因为 HIG 说这应该是一项常见任务......
    • 当然 - 您可以使用一些唯一的文档 ID 保存字符串编码的矩形(文档数据中的隐藏 UUID 属性应该没问题)。实际上,我认为将其放入用户默认值而不是编写文件并伪造时间戳是一个更好的主意(因为它是该机器上特定于用户的(因为其他机器可以具有其他屏幕几何形状))。 Apple 指南并非始终是最好的方法... :-)
    • 考虑这一点:如果您将矩形存储在文档中并且该矩形跟随文件到具有较小屏幕的新计算机,您必须确保为较小的屏幕调整恢复的矩形,从而覆盖在原始计算机上完全有效的位置。现在,您使用另一台计算机的“更正”帧重新打开原始计算机。为什么?为什么不将特定于用户+计算机的文档窗口框架存储在该计算机上,这样无论它在哪里打开,它都始终有效?
    • 这些都是有说服力的点,但是应用数据中旧文档记录的积累呢?删除检查不能被视为理所当然 - 文档可能位于可移动磁盘上,当应用程序对其丢失的文档进行扫描时,该磁盘可能恰好被卸载。好吧,也许这是值得做出的牺牲……无论如何,谢谢您的回答。这确实似乎是唯一的另一种方式。
    • 这是一个艰难的决定,但您对用户默认值中的旧文档数据是正确的。如果用户定期创建/打开新文档,默认数据中会有很多内容。如果将它们保存在一个数组中,则最旧的将是第一个 n。在应用程序启动时,如果记住的文档超过 10 个,请删除第一个 count-10。简单的修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多